博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2014年广州区域赛k题解
阅读量:5936 次
发布时间:2019-06-19

本文共 1747 字,大约阅读时间需要 5 分钟。

2014年广州区域赛k题解

碎碎念

尽力啦

题意

好像是最水的那种最短路把,有点多源最短路的感觉,枚举把哪个人封锁,然后跑一遍spfa就好了。复杂度方面倒是完全应付得来呢。

完整代码

#include
#define INF 0x3f3f3f3f#define MAXN 1005using namespace std;int n,m,tem1,tem2,tem3,flag,ans,nums;int head[MAXN],dis[MAXN],vis[MAXN];struct edge{ int next,to,dis;}edge[1005];void addedge(int from,int to,int dis){ edge[++nums].next=head[from]; edge[nums].to=to; edge[nums].dis=dis; head[from]=nums;}void spfa(){ int s=1; queue
q; for(int i=1;i<=n;i++) { dis[i]=INF; vis[i]=0;} q.push(s);dis[s]=0;vis[s]=1; while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i;i=edge[i].next) { int v=edge[i].to; if(v==flag) { continue; } if(dis[v]>dis[u]+edge[i].dis) { dis[v]=dis[u]+edge[i].dis; if(vis[v]==0) { vis[v]=1; q.push(v); } } } } ans=max(ans,dis[n]);}int main(){ while(scanf("%d %d",&n,&m)) { memset(head,0,sizeof(head)); memset(dis,0,sizeof(head)); memset(vis,0,sizeof(head)); nums=0; ans=0; if(n==0&&m==0) { break; } for(int i=1;i<=m;i++) { scanf("%d %d %d",&tem1,&tem2,&tem3); addedge(tem1,tem2,tem3); addedge(tem2,tem1,tem3); } for(int i=2;i<=n-1;i++) { flag=i; spfa(); } if(ans==INF) { printf("Inf\n"); } else { printf("%d\n",ans); } }}

转载于:https://www.cnblogs.com/SoniciSika/p/9034200.html

你可能感兴趣的文章