关闭

网络的可靠性

276人阅读 评论(0) 收藏 举报
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;

#define MAX 1000
int N, num, MIN, V=0;
bool is_AR[MAX];
 //记录关节点的个数 
vector<int> map[MAX];
int visited[MAX],low[MAX];

void DFSArticul( int v )
{
     visited[v] = MIN = ++num;
     for(int i =0; i< map[v].size(); i++)
     {
      int w = map[v][i];
       if(visited[w]==0)
       {
         DFSArticul(w);
         if(low[w] < MIN) MIN = low[w];
         if(low[w] >= visited[v]) 
         {
        // printf("%d\n",w);
          is_AR[v] = true;
         } 
       } else if(visited[w]<MIN) MIN = visited[w];
     }
     low[v] = MIN;
}

void FindArticul( )
{
      num = 1;
     visited[1]=1;
     int v=0;
     for(int i=2; i<=N; i++) visited[i] = 0;
     int k = map[1][v];
     DFSArticul(k);
     if(num < N )
     {
          
           is_AR[1] = true;
       for(int i=1; i<map[1].size(); i++)
       if(visited[map[1][i]]==0)
        DFSArticul(map[1][i]);
     }
     
}
int main()
{
    while(scanf("%d",&N)!=EOF)
    {
     int a, b;
     int cout = 0;
     for(int i=1; i<=N; i++)
       map[i].clear();  
     for(int i=1; i<N; i++)
     {
       scanf("%d %d",&a, &b);
       map[a].push_back(b);
       map[b].push_back(a);
     }   
    memset(low, 0, sizeof(low));
    memset(is_AR, false, sizeof(is_AR));
    FindArticul();
    for(int i=1; i<=N; i++)
    if(is_AR[i]) cout++;
    printf("%d\n",cout);
    }
   system("pause");
   return 0;
}



刚开始以为是求图的关节点,可是发现还是WA。。。就没法了,再想的话就更难了。


   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:122263次
    • 积分:2341
    • 等级:
    • 排名:第15934名
    • 原创:115篇
    • 转载:11篇
    • 译文:3篇
    • 评论:13条
    常用链接
    最新评论