标签: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