#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<cmath>
#include<cstdlib>
#include<list>
#include<queue>
#define mm(a,b) memset(a,b,sizeof(a))
#define ACCELERATE (ios::sync_with_stdio(false),cin.tie(0))
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
#define MAXN 0x3fffffff
#define PI acos(-1.0)
#define E exp(1.0)
using namespace std;
//#define debug
const int maxn=6000;
int u[maxn],v[maxn];
int n,len;
int nextt[maxn],first[maxn];
int que[99999];
int dis[1025];
bool vis[1025];
int main()
{
#ifdef debug
freopen("in.txt","r",stdin);
// freopen("out2.txt","w",stdout);
#endif // debug
int casei=1;
int st,en;
while(scanf("%d",&n)==1&&n){
mm(dis,0);
mm(vis,0);
mm(first,-1);
int length=-1;
scanf("%d",&st);
int a,b;
len=0;
while(scanf("%d%d",&a,&b)&&(a||b)){
u[len]=a;v[len]=b;
len++;
}
for(int i=0;i<len;i++){
nextt[i]=first[u[i]];
first[u[i]]=i;
}
int l=0,r=0;
que[r++]=st;
vis[st]=1;
while(l!=r){
int t=que[l++];
vis[t]=0;
int k=first[t];
while(k!=-1){
if(dis[v[k]]<dis[u[k]]+1){
dis[v[k]]=dis[u[k]]+1;
if(!vis[v[k]]){
vis[v[k]]=1;
que[r++]=v[k];
}
}
k=nextt[k];
}
}
for(int i=1;i<=n;i++){
if(dis[i]>length){
length=dis[i];
en=i;
}
}
if(length==0) en=st;
printf("Case %d: The longest path from %d has length %d, finishing at %d.\n\n",casei++,st,length,en);
}
return 0;
}
UVA 10000(SPFA+邻接表)
最新推荐文章于 2021-05-05 08:38:13 发布