poj 3275 Ranking the Cows 搜索

题意:给你n个数和m个大小关系,问给出了这些大小关系之后还有多少对数的大小关系不知道。

分析:根据给出的大小关系建有向边,每次对每个点延有向边搜索到底,确定该边的所有连边关系,最后统计没有关系的边对数。

View Code
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define re(i,n) for(int i=0;i<n;i++)
#define re1(i,n) for(int i=1;i<=n;i++)
const int maxn = 2020 , maxm = 20020;
int n , m;
bool pan[maxn][maxn] , vis[maxn];
struct Edge{ int  v, next; }edge[maxm];
int E,head[maxn];
inline void init() { E = 0 ;memset(head,-1,sizeof(head)); }
inline void addedge(int u,int v) {
    edge[E].v=v;edge[E].next=head[u];head[u]=E++;
}
void dfs(int p , int u) {
    pan[p][u] = pan[u][p] = 1;
    for(int i=head[u];i!=-1;i=edge[i].next) {
        int v = edge[i].v;
        if(vis[v]) continue;
        vis[v] = true;
        dfs(p , v);
    }
}
void solve() {
    int ans =  0;
    re1(i,n) { memset(vis,0,sizeof(vis)); dfs(i , i); }
    re1(i,n) re1(j,n) if(!pan[i][j]) ans ++;
    printf("%d\n",ans/2);
}
int main() {
    while(~scanf("%d%d",&n,&m)) {
        memset(pan,0,sizeof(pan));
        init();
        while(m--) {
            int u , v ;
            scanf("%d%d",&u,&v);
            addedge(u,v);
        }
        solve();
    }
    return 0;
}

转载于:https://www.cnblogs.com/lenohoo/archive/2012/07/05/2578377.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值