首页 > Web开发 > 详细

POJ2570 Fiber Network(Floyd)

时间:2016-01-03 17:04:41      阅读:280      评论:0      收藏:0      [点我收藏+]

d[i][j]表示从i点到j点可以全程提供光纤的公司的集合,集合用26位的二进制压缩。

那么状态转移方程就是dk[i][j]|=dk-1[i][k]&dk-1[k][j]。

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int n,d[222][222];
 5 void Floyd(){
 6     for(int k=1; k<=n; ++k){
 7         for(int i=1; i<=n; ++i){
 8             for(int j=1; j<=n; ++j){
 9                 d[i][j]|=d[i][k]&d[k][j];
10             }
11         }
12     }
13 }
14 int main(){
15     int a,b;
16     char str[33];
17     while(~scanf("%d",&n) && n){
18         memset(d,0,sizeof(d));
19         while(~scanf("%d%d",&a,&b) && a){
20             scanf("%s",str);
21             int c=0;
22             for(int i=0; str[i]; ++i) c|=1<<str[i]-a;
23             d[a][b]=c;
24         }
25         Floyd();
26         while(~scanf("%d%d",&a,&b) && a){
27             if(d[a][b]==0){
28                 puts("-");
29                 continue;
30             }
31             for(int i=0; i<26; ++i){
32                 if((d[a][b])>>i&1) putchar(i+a);
33             }
34             putchar(\n);
35         }
36         putchar(\n);
37     }
38     return 0;
39 }

 

POJ2570 Fiber Network(Floyd)

原文:http://www.cnblogs.com/WABoss/p/5096386.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!