CCF认证 2016-03-04 地铁修建

来源:互联网 发布:阅读软件电脑版 编辑:程序博客网 时间:2024/04/29 01:17

题目链接:http://118.190.20.162/view.page?gpid=T54

用dijkstra算法做些改变,按最大边权排序,就可以了

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<vector>using namespace std;const int N=1e5+10;struct edge{int to;int dist;edge(int a,int b){to=a;dist=b;}};vector<edge> g[N];int vis[N];int n,m;int main(){int a,b,c;scanf("%d%d",&n,&m);for(int i=0;i<m;i++){scanf("%d%d%d",&a,&b,&c);g[a].push_back(edge(b,c));g[b].push_back(edge(a,c));}memset(vis,-1,sizeof(vis));queue<int> q;q.push(1);vis[1]=0;while(!q.empty()){int u=q.front();q.pop();int l=g[u].size();for(int i=0;i<l;i++){if(vis[g[u][i].to]==-1||vis[g[u][i].to]>max(vis[u],g[u][i].dist)){vis[g[u][i].to]=max(vis[u],g[u][i].dist);q.push(g[u][i].to);}}}printf("%d\n",vis[n]);return 0;}

原创粉丝点击