比赛 |
至少完成十道练习 |
评测结果 |
AAAAAAAAAA |
题目名称 |
分糖果 |
最终得分 |
100 |
用户昵称 |
Menamovic |
运行时间 |
1.028 s |
代码语言 |
C++ |
内存使用 |
51.06 MiB |
提交时间 |
2017-05-21 10:21:17 |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
const int INF=2147483627;
int n,p,c,ans,g[1010000],tot,dis[1010000],m,q[1010000];
bool inq[1010000];
struct edge
{
int t;
int next;
}e[5010000];
void addedge(int a,int b)
{
e[++tot].t=b;
e[tot].next=g[a];
g[a]=tot;
}
void spfa()
{
for(int i=1;i<=n;i++)
{
dis[i]=INF;
}
int head=0;
int tail=1;
dis[c]=0;
q[tail]=c;
inq[c]=true;
while(head!=tail)
{
head++;
head=(head-1)%1010000+1;
int x=q[head];
inq[x]=false;
for(int i=g[x];i;i=e[i].next)
{
if(dis[e[i].t]>dis[x]+1)
{
dis[e[i].t]=dis[x]+1;
if(!inq[e[i].t])
{
tail++;
tail=(tail-1)%1010000+1;
q[tail]=e[i].t;
inq[e[i].t]=true;
}
}
}
}
}
int main()
{
freopen("dividecandy.in","r",stdin);
freopen("dividecandy.out","w",stdout);
scanf("%d%d%d%d",&n,&p,&c,&m);
for(int i=1;i<=p;i++)
{
int a,b;
scanf("%d%d",&a,&b);
addedge(a,b);
addedge(b,a);
}
spfa();
for(int i=1;i<=n;i++)
{
if(dis[i]>ans&&i!=c) ans=dis[i];
}
printf("%d",ans+m+1);
return 0;
}