Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- const int maxn = 50001;
- FILE *in = fopen("genius.in","r"), *out = fopen("genius.out","w");
- struct graf
- {
- int nod;
- graf *next;
- };
- int n,m,s,p,sol;
- graf *a[maxn];
- int v[maxn],c[maxn];
- void add(int what, int where)
- {
- graf *q = new graf;
- q->nod = what;
- q->next = a[where];
- a[where] = q;
- }
- void read()
- {
- fscanf(in,"%d %d",&n,&m);
- int x,y;
- for (int i=0;i<m;++i)
- {
- fscanf(in, "%d %d", &x, &y);
- add(y, x);
- add(x, y);
- }
- fscanf(in,"%d %d",&s,&p);
- }
- void bfs()
- {
- for ( int i = 1; i <= n; ++i )
- v[i] = -1;
- v[s] = 0;
- int p = 0, u = 0;
- c[p] = s;
- while ( p <= u )
- {
- int x = c[p++];
- graf *q = a[x];
- while ( q )
- {
- if ( v[q->nod] == -1 )
- {
- v[q->nod] = v[x] + 1;
- c[++u] = q->nod;
- }
- q = q->next;
- }
- }
- for ( int i = 1; i <= n; ++i )
- if(sol<v[i])
- sol=v[i];
- }
- int main()
- {
- read();
- bfs();
- v[s]=1;
- for ( int i = 1; i <= n; ++i )
- if(v[i]==-1)
- {
- fprintf(out,"%d ",-1);
- return 0;
- }
- fprintf(out, "%d ",sol+p);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement