记录编号 58330 评测结果 AAAAAAAAAA
题目名称 聚会 最终得分 100
用户昵称 Gravatarfeng 是否通过 通过
代码语言 C++ 运行时间 0.034 s
提交时间 2013-04-19 14:37:21 内存使用 8.21 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
struct node{
	int nex;
	
}a[2200];
struct edge{
	int nex,y,v;
}e[220000];


int n,m,s,p;
int dis1[2200];
bool f[2200];
int x[220000];
int y[220000];
int v[220000];
int ans[2200];
int min(int a,int b){
	return a<b?a:b;
}
void init(){
	freopen("partyb.in","r",stdin);
	freopen("partyb.out","w",stdout);
	scanf("%d%d%d",&n,&m,&s);
	for (int i=1;i<=m;i++)
		scanf("%d%d%d",&x[i],&y[i],&v[i]);
}
void add(int x,int y,int v){
	p++;
	e[p].nex=a[x].nex;
	a[x].nex=p;
	e[p].y=y;
	e[p].v=v;
	
}
void dij1(int s){
	memset(dis1,10,sizeof(dis1));
	memset(f,false,sizeof(f));
	f[s]=true;
	dis1[s]=0;
	int t=a[s].nex;
	int y,v;
	while (t){
		y=e[t].y;
		v=e[t].v;
		dis1[y]=min(dis1[y],v);
		t=e[t].nex;
	}
	int k,minn;
	for (int i=2;i<=n;i++){
		minn=dis1[0];
		for (int j=1;j<=n;j++)
			if (!f[j] && dis1[j]<minn){
				
				minn=dis1[j];
				if (minn==0){
					int o;
					o++;
				}
				k=j;
			}
		f[k]=true;
		t=a[k].nex;
		while (t){
			y=e[t].y;
			v=e[t].v;
			if (!f[y])
				dis1[y]=min(dis1[y],v+dis1[k]);
			t=e[t].nex;
		}
	}
}
void work(){
	p=0;
	for (int i=1;i<=m;i++)
		add(x[i],y[i],v[i]);
	dij1(s);
	for (int i=1;i<=n;i++)
		ans[i]+=dis1[i];
	memset(a,0,sizeof(a));
	memset(e,0,sizeof(e));
	p=0;
	for (int i=1;i<=m;i++)
		add(y[i],x[i],v[i]);
	dij1(s);
	for (int i=1;i<=n;i++)
		ans[i]+=dis1[i];
	int maxx=0;
	for (int i=1;i<=n;i++)
		if (ans[i]>maxx && ans[i]<=dis1[0]) maxx=ans[i];
	printf("%d",maxx);
	
}


int main()
{
	init();
	work();
	return 0;
}