记录编号 |
128484 |
评测结果 |
AAAAAAAA |
题目名称 |
旅行计划 |
最终得分 |
100 |
用户昵称 |
窝 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.010 s |
提交时间 |
2014-10-17 19:38:05 |
内存使用 |
0.37 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n,m,v;
int a[101][101];
long long dis[1001];
bool flag[1001];
int pre[1001];
void spfa(int x)
{
memset(dis,0x7f,sizeof(dis));
memset(flag,0,sizeof(flag));
flag[x]=1;
queue<int >q;
dis[x]=0;
q.push(x);
int k;
while(!q.empty())
{
k=q.front();
for(int i=0;i<n;i++)
{
if(dis[i]>dis[k]+a[k][i])
{
pre[i]=k;
dis[i]=dis[k]+a[k][i];
if(!flag[i])
{
q.push(i);
flag[i]=1;
}
}
}
flag[k]=0;
q.pop();
}
}
int main()
{
freopen("djs.in","r",stdin);
freopen("djs.out","w",stdout);
//cout<<pre[101]<<endl;
memset(pre,-1,sizeof(pre));
cin>>n>>m;
cin>>v;
int x,y,z;
int f[1000];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
a[i][j]=0x7fffffff/3;
a[i][i]=0;
f[i]=0;
}
for(int i=1;i<=m;i++)
{
cin>>x>>y>>z;
a[x][y]=z;
}
spfa(v);
for(int i=0;i<n;i++)
{
cout<<i<<":"<<endl;
if(i==v||dis[i]==0x7fffffff/3)cout<<"no"<<endl;
else
{
int c=0;
cout<<"path:";
int j=pre[i];
while(j!=-1)
{
//cout<<j<<endl;
f[++c]=j;
j=pre[j];
}
for(int j=c;j>=1;j--)
{
cout<<f[j]<<' ';
if(j==1){cout<<i;
cout<<endl;
}
}
cout<<"cost:"<<dis[i]<<endl;;
}
}
}