hdu 3986(最短路+枚举)
来源:互联网 发布:诺基亚lumia800软件 编辑:程序博客网 时间:2024/05/18 12:42
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3986
思路:先spfa求出最短路,然后枚举删除最短路上的边,每次删除一条边,就求一次最短路,然后去最大的那个就行了。。。可以重边的问题没考虑完善,wa了好多次啊!!!
View Code
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<vector> 5 using namespace std; 6 const int MAXN=1000+10; 7 const int inf=1<<30; 8 struct Node{ 9 int v,w,id;10 };11 vector<Node>vet[MAXN];12 int path[MAXN];13 int dist[MAXN];14 bool visited[MAXN];15 bool mark[MAXN*50];16 int id[MAXN];17 int n,m;18 bool tag;19 20 void SPFA(int u){21 for(int i=1;i<=n;i++)dist[i]=inf;22 dist[u]=0;23 memset(visited,false,sizeof(visited));24 queue<int>Q;25 Q.push(u);26 while(!Q.empty()){27 int u=Q.front();28 Q.pop();29 visited[u]=false;30 for(int i=0;i<vet[u].size();i++){31 int v=vet[u][i].v;32 int w=vet[u][i].w;33 int ID=vet[u][i].id;34 if(mark[vet[u][i].id])continue;35 if(dist[u]+w<dist[v]){36 dist[v]=dist[u]+w;37 if(tag)path[v]=u,id[v]=ID;//这边只需第一次的时候记录路径就行了。。。38 if(!visited[v]){39 Q.push(v);40 visited[v]=true;41 }42 }43 }44 }45 }46 47 48 int main(){49 int _case;50 scanf("%d",&_case);51 while(_case--){52 scanf("%d%d",&n,&m);53 for(int i=1;i<=n;i++)vet[i].clear();54 memset(path,-1,sizeof(path));55 memset(mark,false,sizeof(mark));56 //memset(id,0,sizeof(id));57 for(int i=1;i<=m;i++){58 int u,v,w;59 scanf("%d%d%d",&u,&v,&w);60 Node p1,p2;61 p1.v=u,p2.v=v;62 p1.w=p2.w=w;63 p1.id=p2.id=i; //每次输的时候边的id是一样的64 vet[u].push_back(p2);65 vet[v].push_back(p1);66 }67 tag=true;68 SPFA(1);69 tag=false;70 if(dist[n]==inf){71 printf("-1\n");72 continue;73 }74 int ans=0;75 bool flag=true;76 for(int u=n;u!=-1;u=path[u]){77 //由于有重边,故每次要找不同id的78 mark[id[u]]=true;79 SPFA(1);80 mark[id[u]]=false;81 if(dist[n]==inf){82 printf("-1\n");83 flag=false;84 break;85 }86 ans=max(ans,dist[n]);87 }88 if(flag){89 printf("%d\n",ans);90 }91 }92 return 0;93 }
0 0
- hdu 3986(最短路+枚举)
- hdu 3986 (枚举+最短路)
- HDU 3986 最短路+枚举
- HDU-1595&3986-枚举+最短路
- Hdu 3986 【枚举】【最短路】 解题报告
- HDU 2363 Cycling(枚举+最短路)
- hdu 2363(最短路+枚举)
- hdu 2363 Cycling (最短路spfa + 暴力枚举)
- hdu 2363(限制最短路 二分+枚举+最短路)
- HDU 1595 枚举+最短路(删掉边)
- HDU 2363 Cycling 最短路+枚举
- HDU 2433 Travel 枚举+最短路
- HDU 2363 Cycling 枚举限制+最短路
- HDU 2544 最短路 (单源最短路)
- hdu 3986 Harry Potter and the Final Battle(最短路+枚举删边)
- HDU - 3986 Harry Potter and the Final Battle(最短路SPFA+枚举删边)
- hdu 3986 Harry Potter and the Final Battle 最短路spfa+枚举
- hdu1595(枚举+最短路,Dijkstra/SPFA)
- 第14周-项目一-动物这样叫
- hdu 2363(最短路+枚举)
- hdu 2377
- hdu 2962(最短路+二分)
- hdu 3191+hdu 1688(最短路+次短路)
- hdu 3986(最短路+枚举)
- linux性能分析 sar 命令详解
- hdu 1116(并查集+欧拉路判断)
- IOS 画图总结
- hdu 1181(并查集+拓扑排序)
- 应用程序与内核模块的比较
- hdu 1829+hdu 1856(并查集)
- 几种算法的C实现
- hdu 2473