标签:bsp auto conf front sample tail distance lag else
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 46727 | Accepted: 15899 |
5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100
90
Dijkstra()
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; typedef __int64 LL; const int maxn = 2005; const int INF = 0x3f3f3f3f; struct Edge{ int u,v,next; LL w; bool operator < (const Edge & a)const { return w > a.w; } }edge[maxn<<1] ; int tot = 0,head[maxn]; bool vis[maxn]; LL dis[maxn]; void addedge(int u,int v,LL w) { edge[tot] = (Edge){u,v,head[u],w }; head[u] = tot++; } void Dijkstra() { priority_queue<Edge>que; Edge p; memset(dis,INF,sizeof(dis)); memset(vis,false,sizeof(vis)); p.v = 1; que.push(p); dis[1] = 0; while (!que.empty()) { p = que.top(); que.pop(); int u = p.v; if (vis[u]) continue; vis[u] = true; for (int i = head[u];i != -1;i = edge[i].next) { int v = edge[i].v; if (dis[u] + edge[i].w < dis[v]) { dis[v] = dis[u] + edge[i].w; p.u = u,p.v = v,p.w = dis[v]; que.push(p); } } } } int main() { //freopen("input.txt","r",stdin); int T,N,u,v; LL w; memset(head,-1,sizeof(head)); scanf("%d%d",&T,&N); for (int i = 0;i < T;i++) { scanf("%d%d%I64d",&u,&v,&w); addedge(u,v,w); addedge(v,u,w); } Dijkstra(); printf("%I64d\n",dis[N]); return 0; }
spfa()
#include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int MAX_N = 1005; bool flag[MAX_N]; int edge[MAX_N][MAX_N]; void spfa(int n) { int dis[MAX_N]; queue<int>que; memset(flag,false,sizeof(flag)); memset(dis,0x3f3f3f3f,sizeof(dis)); dis[1] = 0; que.push(1); flag[1] = true; while (!que.empty()) { int curval = que.front(); que.pop(); flag[curval] = false; for (int i = 1;i <= n;i++) { if (dis[curval] < dis[i] - edge[curval][i]) { dis[i] = dis[curval] + edge[curval][i]; if (!flag[i]) { que.push(i); flag[i] = true; } } } } printf("%d\n",dis[n]); } int main() { int N,T; while (~scanf("%d%d",&T,&N)) { int u,v,w; for (int i = 1;i <= N;i++) { for (int j = 1;j <= i;j++) { if (i == j) edge[i][j] = 0; else edge [i][j] = edge[j][i] = INF; } } for (int i = 0;i < T;i++) { scanf("%d%d%d",&u,&v,&w); /*if (w < edge[u][v]) { edge[u][v] = edge[v][u] = w; }*/ edge[u][v] = edge[v][u] = min(w,edge[u][v]); } spfa(N); } return 0; }
POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)
标签:bsp auto conf front sample tail distance lag else
原文地址:http://www.cnblogs.com/zzy19961112/p/6087549.html