比赛 ctime蒟蒻生日赛 评测结果 AAAAAAAA
题目名称 旅行计划 最终得分 100
用户昵称 Hyoi_ctime 运行时间 0.085 s
代码语言 C++ 内存使用 0.30 MiB
提交时间 2017-10-17 15:13:34
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
const int inf=20010318;
int n,m,v; 
int x,y,z;
int g[101][101];
int f[101][101],path[101],p[101],d[101];
vector<int>haha[101];
queue<int>q;
bool pp=0;
//inline void find(int cur)
//{
//    if(cur==v)
//    {
//        printf("%d ",cur);
//    }
//    else
//    {
//        find(path[cur]);
//        printf("%d ",cur);
//    }
//    return;
//}
inline void dfs(int l,int r,int deep){
	//cout<<l<<" "<<r<<endl;
    if(l==r){
    	//cout<<endl;
    	//int t=p,tot=0;
		//for(int i=1;i<deep;i++){
		//	tot+=f[t][path[i]];
		//	t=path[i];
		//}
    	//if(tot==f[p][r]){
    	cout<<v<<" ";
    	   for(int i=1;i<deep;i++)
    		cout<<path[i]<<" ";	
    		pp=1;
		//}
    	//cout<<endl;
    	//cout<<"aaaaaaaaaaaaaaaa\n";
    	
		return ;
	}
	for(int i=0;i<n;i++)
    if(!pp&&g[l][i]==f[l][i]&&i!=l&&f[l][i]+f[i][r]==f[l][r]){
    	//cout<<deep<<":"<<i<<"->";
		path[deep]=i;
		dfs(i,r,deep+1);
	}
	return ;
}
 
inline void read()
{
	freopen("djs.in","r",stdin);
	freopen("djs.out","w",stdout);
	scanf("%d%d%d",&n,&m,&v);
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
		f[i][j]=inf;
	for(int i=0;i<n;i++)
		f[i][i]=0;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		f[x][y]=z;
		g[x][y]=z;
	}
	for(int k=0;k<n;k++)
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
			{
				if(f[i][j]>f[i][k]+f[k][j])
				{
					f[i][j]=f[i][k]+f[k][j];
				}
			}
	for(int i=0;i<n;i++)
	{
		printf("%d",i);
		printf(":\n");
		if(f[v][i]==0)printf("no\n");
		else if(f[v][i]==inf)printf("no\n");
		else
		{
			printf("path:");
			pp=0;
			//cout<<v<<" ";
			dfs(v,i,1);
			printf("\n");
			printf("cost:");
			printf("%d\n",f[v][i]);
		}
	}
}
int main()
{
	read();
	return 0; 
}