记录编号 298613 评测结果 AAAAAAAAAA
题目名称 [USACO Feb07] 奶牛聚会 最终得分 100
用户昵称 GravatarAntiLeaf 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2016-08-22 10:56:29 内存使用 0.00 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=1010;
struct node{
	int x,dis;
	node(int x,int dis):x(x),dis(dis){}
	bool operator<(const node &x)const{
		return dis>x.dis;
	}
};
int n,m,p,a[maxn][maxn],dis1[maxn],dis2[maxn],x,y;
bool vis[maxn];
void dijkstra1(int);
void dijkstra2(int);
inline int MAIN(){
#define MINE
#ifdef MINE
	freopen("sparty.in","r",stdin);
	freopen("sparty.out","w",stdout);
#endif
	scanf("%d%d%d",&n,&m,&p);
	memset(dis1,63,sizeof(dis1));
	memset(dis2,63,sizeof(dis2));
	while(m--){
		scanf("%d%d",&x,&y);
		scanf("%d",&a[x][y]);
	}
	dijkstra1(p);
	dijkstra2(p);
	y=0;
	for(int i=1;i<=n;i++)y=max(y,dis1[i]+dis2[i]);
	printf("%d",y);
	return 0;
}
void dijkstra1(int x){
	memset(vis,0,sizeof(vis));
	priority_queue<node>heap;
	heap.push(node(x,0));
	while(!heap.empty()){
		node t=heap.top();
		heap.pop();
		x=t.x;
		if(vis[x])continue;
		//printf("%d %d\n",x,t.dis);
		vis[x]=true;
		dis1[x]=t.dis;
		for(int i=1;i<=n;i++)if(a[x][i]&&!vis[i])
			heap.push(node(i,t.dis+a[x][i]));
	}
}
void dijkstra2(int x){
	//printf("\n\n");
	memset(vis,0,sizeof(vis));
	priority_queue<node>heap;
	heap.push(node(x,0));
	while(!heap.empty()){
		node t=heap.top();
		heap.pop();
		x=t.x;
		if(vis[x])continue;
		//printf("%d %d\n",x,t.dis);
		vis[x]=true;
		dis2[x]=t.dis;
		for(int i=1;i<=n;i++)if(a[i][x]&&!vis[i])
			heap.push(node(i,t.dis+a[i][x]));
	}
}
int hzoier=MAIN();
int main(){;}