心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
设无向图顶点个数为n,边数为m。DFS遍历无向图,找到该无向图连通分量的个数num,则冗余关系数为m-n+num。另外由于此题中顶点数较多而边数较少,采用邻接表存储,提高效率。
以下是我的代码:
#include<iostream>
#include
<string.h>
#define maxn 1007
#define maxm 1007
using namespace std;

typedef 
struct
{
    
long v,w;
}edge;
long n,m,num;
long cnt,first[maxn],next[2*maxm];
edge e[
2*maxm];
bool used[maxn];

void dfs(long s)
{
    used[s]
=true;
    
for(long i=first[s];i;i=next[i])
        
if(!used[e[i].v])
            dfs(e[i].v);
}

int main()
{
    memset(first,
0,sizeof(first));
    memset(next,
0,sizeof(next));
    memset(e,
0,sizeof(e));
    
    cin
>>m>>n;
    cnt
=0;
    
for(long i=1;i<=m;i++)
    {
        
long a,b;
        cin
>>a>>b;
        cnt
++;e[cnt].v=b;
        next[cnt]
=first[a];
        first[a]
=cnt;
        cnt
++;e[cnt].v=a;
        next[cnt]
=first[b];
        first[b]
=cnt;
    }
    
//  Input
    
    num
=0;
    memset(used,
false,sizeof(used));
    
for(long i=1;i<=n;i++)
        
if(!used[i])
        {
            num
++;
            dfs(i);
        }
    
//  DFS
    
    cout
<<m-n+num<<endl;
    
//  Output
return 0;
}
posted on 2010-10-18 15:38 lee1r 阅读(299) 评论(1)  编辑 收藏 引用 所属分类: 题目分类:图论

FeedBack:
# re: tyvj P1017 冗余关系
2012-09-09 14:35 | spix
经典阿  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理