您的位置:首页 > 其它

POJ.3268 Silver Cow Party (Dijkstra)

2017-07-12 22:35 471 查看

POJ.3268 Silver Cow Party (Dijkstra)

题意分析

稍后补

代码总览

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <cmath>
#define nmax 1005
#define inf 1e8+7
using namespace std;
int n,m,x;
int mp[nmax][nmax];
int shorttime[2][nmax];
bool visit[nmax];
void dij(int s,int hh)
{
int cur  = s;
for(int i = 1;i<=n;++i){
shorttime[hh][i]= inf;
visit[i] = false;
}
shorttime[hh][cur] = 0;
visit[cur] = true;
for(int i =2;i<=n;++i){
int nowmin = inf;
for(int j = 1;j<=n;++j){
if(!visit[j] && shorttime[hh][cur] + mp[cur][j] < shorttime[hh][j]){
shorttime[hh][j] = shorttime[hh][cur] + mp[cur][j];
}
}
for(int j = 1;j<=n;++j){
if(!visit[j] && nowmin >shorttime[hh][j] ){
cur = j;
nowmin = shorttime[hh][j];
}
}
visit[cur] = true;
}
}
void init()
{
for(int i =1 ;i<=n;++i){
for(int j = 1;j<=n;++j){
mp[i][j] = inf;
}
}
for(int i = 1;i<=m;++i){
int a,b,d;
scanf("%d %d %d",&a,&b,&d);
mp[a][b] = d;
}
}
void traverse()
{
for(int i = 1;i<=n;++i){
for(int j = 1;j<=i;++j){
swap(mp[i][j],mp[j][i]);
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d %d %d",&n,&m,&x) != EOF){
init();
int ans[nmax]= {0};
int maxt = 0;
dij(x,0);
traverse();
dij(x,1);
for(int i = 1;i<=n;++i){
if(i == x) continue;
ans[i] = shorttime[0][i] + shorttime[1][i];
if(ans[i]> maxt){
maxt = ans[i];
}

}
printf("%d\n",maxt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dijkstra