栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2186 Popular Cows

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2186 Popular Cows

#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;#define maxn 10005#define maxm 50005struct Edge{    int v, next;} edge[maxm], opedge[maxm];int n, m, head[maxn], ophead[maxn], ncount, nowtime, pos[maxn *2], sig[maxn], signnum, in[maxn];int pointnum[maxn];bool flag[maxn];void addedge(int a, int b){    edge[ncount].v = b;    edge[ncount].next = head[a];    head[a] = ncount;    opedge[ncount].v = a;    opedge[ncount].next = ophead[b];    ophead[b] = ncount;    ncount++;}void input(){    scanf("%d%d", &n, &m);    for (int i =0; i < m; i++)    {        int a, b;        scanf("%d%d", &a, &b);        a--;        b--;        addedge(a, b);    }}void dfs(int a){    flag[a] =true;    pos[nowtime] = a;    nowtime++;    for (int i = head[a]; i !=-1; i = edge[i].next)        if (!flag[edge[i].v]) dfs(edge[i].v);    pos[nowtime] = a;    nowtime++;}void rdfs(int a){    flag[a] =true;    sig[a] = signnum;    pointnum[sig[a]]++;    for (int i = ophead[a]; i !=-1; i = opedge[i].next)        if (!flag[opedge[i].v]) rdfs(opedge[i].v);}int main(){    ncount =0;    memset(head, -1, sizeof(head));    memset(ophead, -1, sizeof(ophead));    memset(flag, 0, sizeof(flag));    input();    nowtime =1;    for (int i =0; i < n; i++)        if (!flag[i]) dfs(i);    memset(flag, 0, sizeof(flag));    memset(pointnum, 0, sizeof(pointnum));    signnum =0;    for (int i =2* n; i >0; i--)        if (!flag[pos[i]])        { rdfs(pos[i]); signnum++;        }    memset(in, 0, sizeof(in));    ncount =0;    for (int i =0; i < n; i++)        for (int j = head[i]; j !=-1; j = edge[j].next) if (sig[i] != sig[edge[j].v])     in[sig[i]]++;    int ans =-1;    bool ok =true;    for (int i =0; i < signnum; i++)        if (in[i] ==0)        { if (ans !=-1) {     ok =false;     break; } ans = i;        }    if (ok)        printf("%dn", pointnum[ans]);    else        printf("0n");    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378096.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号