Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
floyd+位运算感觉很新奇啊,原来可以这样做 #include <stdio.h> #include <memory.h> #define MAXN 201 int G[MAXN][MAXN]; void Print(int n) { char s[27]; int num=0,t=n; while(t) { s[num++]=t%2+'0'; t/=2; } s[num]='\0'; for(int i=0;i<num;++i) if(s[i]=='1') printf("%c",'a'+i); puts(""); } int main() { int n,a,b,i,j,k; char s[27]; while(~scanf("%d",&n)&&n) { memset(G,0,sizeof(G)); while(1) { scanf("%d %d",&a,&b); if(!a&&!b) break; scanf(" %s",s); for(i=0;s[i]!='\0';++i) G[a][b]=G[a][b]|(1<<(s[i]-'a')); } for(k=1;k<=n;++k) { for(i=1;i<=n;++i) { if(!G[i][k]) continue; for(j=1;j<=n;++j) { if(!G[k][j]) continue; G[i][j]|=(G[i][k]&G[k][j]); } } } while(1) { scanf("%d %d",&a,&b); if(!a&&!b) break; if(G[a][b]) Print(G[a][b]); else puts("-"); } puts(""); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator