storm

努力学习编译知识,恶补计算机体系结构!

网络的可靠性


#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。。。就没法了,再想的话就更难了。






            
阅读更多
文章标签: 网络 system
上一篇第三届河南省大学生程序设计竞赛 聪明的“KK”
下一篇基因匹配问题
想对作者说点什么? 我来说一句

提高校园网络可靠性的技术方法

2014年05月04日 286KB 下载

没有更多推荐了,返回首页

关闭
关闭