UVa 11838

来源:互联网 发布:手机怎么避开网络监控 编辑:程序博客网 时间:2024/05/18 02:55

题目:已知一个有向图,问是否是任意两点见可到达(强连通)。

分析:图论。先求传递闭包,然后判断即可。

说明:(⊙v⊙)嗯。

#include <stdio.h>  #include <stdlib.h>  #include <string.h>  #include <math.h>    int path[2002][2002];    int main()  {      int N, M, V, W, P;      while (~scanf("%d%d",&N,&M) && N+M) {          memset(path, 0, sizeof(path));          for (int i = 1; i <= M; ++ i) {              scanf("%d%d%d",&V,&W,&P);              if (P == 1) {                  path[V][W] = 1;              }else {                  path[V][W] = 1;                  path[W][V] = 1;              }          }                    for (int k = 1; k <= N; ++ k) {              for (int i = 1; i <= N; ++ i) {                  for (int j = 1; j <= N; ++ j) {                      path[i][j] |= path[i][k]&path[k][j];                  }              }          }                    int flag = 1;          for (int i = 1; i <= N; ++ i) {              for (int j = 1; j <= N; ++ j) {                  if (i != j && !(path[i][j] && path[j][i])) {                      flag = 0;                    break;                }              }            if (!flag) {break;}        }                    printf("%d\n",flag);      }            return 0;  }  


原创粉丝点击