tarjan帮我来找桥

来源:互联网 发布:ug五轴编程工资多少钱 编辑:程序博客网 时间:2024/05/01 12:48

http://acm.hust.edu.cn/vjudge/contest/129458#problem/B
判断图中各个联通分量是不是只有中间一条桥,两边都是完全图

这里写图片描述

#include <cstdio>#include <cstring>#include <iostream>#include <vector>#define maxn 110using namespace std;vector<int>vc[maxn];int low[maxn];int val[maxn];int T = 0,ans = 0;int X,U;bool vis[maxn];   //区分不同的连通块。当前点在之前的块中找过就不在重复找,ca之间初始化int no,edge,QQ;   //QQ表示该连通块多少个点void dfs(int x,int fa){  val[x] = T;  vis[x] = true;  QQ++;  low[x] = T++;  for(int i = 0; i < vc[x].size();i++){    int u = vc[x][i];    if(u == fa)      continue;    if(val[u] == -1){      dfs(u,x);      if(low[u] > val[x]){         ans++;         X = x;   //桥的两边两个点分别是X和U         U = u;      }      low[x] = min(low[x],low[u]);    }    else      low[x] = min(low[x],val[u]);  }}void init(){  scanf("%d%d",&no,&edge);  for(int i = 0 ; i < edge ;i++){    int u,v;    scanf("%d%d",&u,&v);    vc[u].push_back(v);    vc[v].push_back(u);  }}int sov(int tmp,int cnt,int s){  for(int i = 0 ; i < vc[tmp].size();i++){    cnt++;    if( vc[vc[tmp][i]].size() != (QQ/2-1) &&vc[tmp][i]!= s){      return -1;    }  }  return cnt;}void inital(){  QQ = 0;  ans = 0;  T = 0;  memset(val,-1,sizeof(val));  memset(low,-1,sizeof(low));}int main(){  int Ca;  cin >> Ca;  int ca = 1;  while(Ca--){    printf("Case #%d: ",ca++);    init();    memset(vis,false,sizeof(vis));    int ANS = 0;    for(int i = 1; i <= no ;i++){      if(vis[i] == true)        continue;      inital();      dfs(i,-1);      if(ans == 1){        int c1 = sov(X,0,U),j;        if(c1 == -1)          continue;        int c2 = sov(U,0,X);        if(c2 == -1)          continue;        if(c1 == c2)          ANS++;      }          if(ans == 3 && QQ == 4&&vc[X].size() != 3 && vc[U].size() != 3)//四个点一条串串也是可以的        ANS++;    }  cout <<ANS<<endl;  for(int i = 1 ; i <= no ;i++)    vc[i].clear();  }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被黑色黄蜂蜇了怎么办 手指被黄蜂蛰了怎么办 被马蜂蛰了肿了怎么办 给青竹蛇咬了怎么办 被青竹蛇咬了怎么办 孕早期吃了桂皮怎么办? 怀孕后吃了八角怎么办 孕妇吃了点八角怎么办 煮粥老是溢出来怎么办 6个月的小孩咳嗽怎么办 10个月婴儿咳嗽怎么办 6个月婴儿感冒了怎么办 六个月宝宝有痰怎么办 9月婴儿牛奶过敏怎么办 一用粉底就过敏怎么办 7个月婴儿过敏怎么办 9个月宝宝腹泻怎么办 9个月宝宝拉肚子怎么办 5个月宝宝拉肚子怎么办 九个月大宝宝拉肚子怎么办 九个半月的宝宝拉肚子怎么办 9个月婴儿拉稀怎么办 九个月的宝宝拉肚子怎么办 9个月宝宝拉稀水怎么办 2岁宝宝腹泻拉水怎么办 18个月宝宝拉水怎么办 2个月宝宝拉稀水怎么办 2个月的宝宝腹泻怎么办 2个月的宝宝拉稀怎么办 宝宝不喝补液盐怎么办 4个月宝宝腹泻怎么办 6个月宝宝腹泻怎么办 四个月的宝宝拉肚子怎么办 7个月婴儿便秘怎么办 宝宝9个月拉肚子怎么办 2个月宝宝拉肚子怎么办 4个月宝宝没奶怎么办 宝宝又吐又拉怎么办 冬季车放在外面怎么办 冬天车放在外面怎么办 新车被拖走了要怎么办