记录编号 221664 评测结果 WAAAAAAREE
题目名称 分糖果 最终得分 60
用户昵称 Gravatarliu_runda 是否通过 未通过
代码语言 C++ 运行时间 1.103 s
提交时间 2016-01-25 14:07:42 内存使用 19.24 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;

struct edge{
	int to,suc;
}lst[3000000];
int first[100005];//first[i]:i号小朋友的第一条边在edge中的下标,0:no
bool visited[100005];
int n,p,c,m;
int tot=1;//目前总边数+1
void add_edge(int start,int end){
   lst[tot].to = end;
   lst[tot].suc = first[start];
   first[start] = tot++;
}
int ans[100005];//c到i经过几次传递
int main(){
	freopen("dividecandy.in","r",stdin);
	freopen("dividecandy.out","w",stdout);
	scanf("%d %d %d %d",&n,&p,&c,&m);
	int tmp1,tmp2,maxn = 0;
	queue<int> q;
	for(int i = 0;i<p;i++){
		scanf("%d%d",&tmp1,&tmp2);
		add_edge(tmp1,tmp2);
		add_edge(tmp2,tmp1);
	}
	ans[c] = -1;
	for(int pt = first[c];pt;pt = lst[pt].suc){
		ans[lst[pt].to] = 1;
		q.push(lst[pt].to);
		maxn = 1;
	}
	while(!q.empty()){
		int v = q.front();
		q.pop();
		for(int pt = first[v];pt;pt = lst[pt].suc){
			if(!ans[lst[pt].to]){
				ans[lst[pt].to] = ans[v]+1;
				q.push(lst[pt].to);
				if(ans[lst[pt].to]>maxn)maxn = ans[lst[pt].to];
			}
		}
	}
	printf("%d",m+maxn+1);
	fclose(stdin);fclose(stdout);
	return 0;
}