hdu4514(求图中最长的路径)
来源:互联网 发布:linux 打包压缩文件夹 编辑:程序博客网 时间:2024/04/30 10:19
题意:给一个图,如果存在环就输出YES,否则求出图中的最长路径(树的直径)。
解题分析:首先用并查集或dfs判环,然后求图中的最长路径。这里需要知道一个知识点:求一个连通块中的最长路径,首先,从任意从该连通块中任意一个结点出发,求最长路径,最长路径的端点是S,然后再从S出发求最长路径L,路径L就是所要求的路径,自己画个图想一下就可以理解了。
代码如下:
#include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>#include<string>#include<vector>#define N 100005#define inf 0x3f3f3f3f#define pi acos(-1.0)#define eps 10e-6using namespace std;struct node{ int u,w;};vector<node> q[N];int vis[N],tempvis[N];int flag;void dfs(int cur,int pre)//dfs判无向环{ vis[cur] = 1; if(flag) return; int i,len = q[cur].size(); for(i = 0; i < len; i++) { int temp = q[cur][i].u; if(!vis[temp]) dfs(temp,cur); else if(pre != temp) { flag = 1; return; } }}int tempk,tempw;void dfs1(int cur,int cost){ //cout<<cost<<endl; if(cost > tempw) { tempk = cur; tempw = cost; } vis[cur] = 1; tempvis[cur] = 1; int i,len = q[cur].size(); for(i = 0; i < len; i++) { int t = q[cur][i].u; if(!tempvis[t]) dfs1(t,cost+q[cur][i].w); }}int main(){ int n,m; while(scanf("%d%d",&n,&m) != EOF) { int i; for(i = 0; i <= n; i++) q[i].clear(); for(i = 0; i < m; i++) { int x,y,w; scanf("%d%d%d",&x,&y,&w); node temp; temp.u = x;temp.w = w; q[y].push_back(temp); temp.u = y; q[x].push_back(temp); } flag = 0; memset(vis,0,sizeof(vis)); for(i = 1; i <= n; i++) if(!vis[i]) dfs(i,0); if(flag) { printf("YES\n"); continue; } int resw = -1; memset(vis,0,sizeof(vis)); for(i = 1; i <= n; i++) { if(!vis[i]){ tempw = -1; memset(tempvis,0,sizeof(tempvis)); dfs1(i,0);//求从i点出发的最长路径,到达的点是S //cout<<resw<<endl; if(tempw > resw) resw = tempw; memset(tempvis,0,sizeof(tempvis)); tempw = -1; dfs1(tempk,0);//从S出发求最长路径 if(tempw > resw) resw = tempw; } } printf("%d\n",resw); } return 0;}
0 1
- hdu4514(求图中最长的路径)
- hdu4514
- HDU4514
- HDU4514(非连通图的环判断与图中最长链)
- HDU4514(非连通图的环判断与图中最长链)
- 求树的直径(最长路径)
- poj1985Cow Marathon (树的最长路径)
- POJ1949 (DAG图的最长路径)
- 图的最长路径
- 图的最长路径
- HDU4514湫湫系列故事——设计风景线(树的直径)
- 求图中最长路径
- 二叉树的最长路径
- 二叉树的最长路径
- 二叉树的最长路径
- 二叉树的最长路径
- POJ3268 牛的最长来回时间(单源最短路径)
- SDUTOJ 2498 AOE网上的关键路径(最长路)
- 修改ubuntu grub启动菜单的顺序
- 单源最短路径算法之dijstra
- DelphiXe 中静态数组TByteArray和动态数组TBytes /array of byte 的区别
- java--介绍人物
- 第一次使用csdn的博客
- hdu4514(求图中最长的路径)
- 《我所知道的软件测试自动化》—关键字驱动的过去和未来
- 开源夏令营总结
- PreSubclassWindow里面再次调用Create函数创建子控件
- 数据结构----队列
- eclipse的优化 gc.log
- Java基础---运算符
- 2048中需要使用的逻辑
- java实现后台自动发邮件功能