标签:des io os ar for sp 2014 art c
Silver Cow PartyUSACO 2007 February Silver
/*****************************
author : Grant Yuan
time : 2014/10/4 23:07
source : POJ 3268
algorithm: Dijkstra
******************************/
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
#define MAX 1007
#define INF 0x7ffffff
struct point{int x,y;};
int n,m,x;
int ans;
point v[MAX];
int cost[MAX][MAX];
bool used[MAX];
int mincost[MAX];
int start,final;
int sum[MAX];
void Dijkstra_Go()
{
for(int i=1;i<=n;i++)
{
used[i]=false;
mincost[i]=cost[i][x];
}
for(int i=1;i<=n;i++)
{
int temp=INF;
int k=-1;
for(int j=1;j<=n;j++)
{
if(!used[j]&&mincost[j]<temp)
{
temp=mincost[j];
k=j;
}
}
if(k==-1) break;
used[k]=true;
for(int j=1;j<=n;j++)
{
if(!used[j]) mincost[j]=min(mincost[j],mincost[k]+cost[j][k]);
}
}
}
void Dijkstra_Back()
{
for(int i=1;i<=n;i++)
{
used[i]=false;
mincost[i]=cost[x][i];
}
for(int i=1;i<=n;i++)
{
int temp=INF;int k=-1;
for(int j=1;j<=n;j++)
{
if(!used[j]&&mincost[j]<temp)
{
temp=mincost[j];
k=j;
}
}
if(k==-1) break;
used[k]=true;
for(int j=1;j<=n;j++)
{
if(!used[j]) mincost[j]=min(mincost[j],mincost[k]+cost[k][j]);
}
}
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&x)){
ans=0;
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cost[i][j]=INF;
for(int i=1;i<=n;i++) cost[i][i]=0;
for(int i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
cost[a][b]=c;
}
Dijkstra_Go();
for(int i=1;i<=n;i++)
{
sum[i]=mincost[i];
}
Dijkstra_Back();
for(int i=1;i<=n;i++)
{
sum[i]+=mincost[i];
}
for(int i=1;i<=n;i++) ans=max(ans,sum[i]);
printf("%d\n",ans);}
return 0;
}
标签:des io os ar for sp 2014 art c
原文地址:http://blog.csdn.net/yuanchang_best/article/details/39785025