比赛 至少完成十道练习 评测结果 AAAAAAAAAA
题目名称 分糖果 最终得分 100
用户昵称 Ostmbh 运行时间 0.953 s
代码语言 C++ 内存使用 2.22 MiB
提交时间 2017-05-20 21:42:01
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
vector<int>A[100001];
int dis[100001];
int vis[100001]={0};
queue<int>q;
int read(){
	int x=0;
	char c=getchar();
	while(!(c>='0'&&c<='9'))
		c=getchar();
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x;
}
int main(){
	freopen("dividecandy.in","r",stdin);
	freopen("dividecandy.out","w",stdout);
	int n,p,c;
	n=read();
	p=read();
	c=read();
	int m;
	m=read();
	int ans=0;
	memset(dis,127/2,sizeof(dis));
	int x,y;
	for(int i=1;i<=p;i++){
		x=read();
		y=read();
		A[x].push_back(y);
		A[y].push_back(x);
	}
	dis[c]=1;
	vis[c]=1;
	q.push(c);
	while(!q.empty()){
		int cd=q.front();
		q.pop();
		for(int i=0;i<A[cd].size();i++){
			int u=A[cd][i];
			if(!vis[u]){
				dis[u]=min(dis[u],dis[cd]+1);
				vis[u]=1;
				q.push(u);
				if(dis[u]+m>ans)
					ans=dis[u]+m;
			}
		}
	}
	cout<<ans<<endl;
return 0;
}