• poj1308


    简单题

    View Code
    #include <iostream>
    #include
    <cstdio>
    #include
    <cstdlib>
    #include
    <cstring>
    using namespace std;

    #define maxn 1006

    struct Edge
    {
    int v, next;
    }edge[
    1000005];

    int name[maxn];
    int n, ecount, tot, root;
    int in[maxn];
    int head[maxn];
    bool vis[maxn];
    bool ok;

    void addedge(int a, int b)
    {
    edge[ecount].next
    = head[a];
    edge[ecount].v
    = b;
    head[a]
    = ecount;
    in[b]++;
    ecount
    ++;
    }

    int find(int a)
    {
    for (int i = 0; i < n; i++)
    if (name[i] == a)
    return i;
    name[n
    ++] = a;
    return n - 1;
    }

    void dfs(int root)
    {
    vis[root]
    = true;
    tot
    ++;
    for (int i = head[root]; i != -1; i = edge[i].next)
    {
    if (vis[edge[i].v])
    {
    ok
    = false;
    return;
    }
    if (!ok)
    return;
    dfs(edge[i].v);
    }
    }

    int main()
    {
    //freopen("t.txt", "r", stdin);
    int t = 0;
    while (1)
    {
    t
    ++;
    memset(
    in, 0, sizeof(in));
    memset(head,
    -1, sizeof(head));
    memset(vis,
    0, sizeof(vis));
    ecount
    = 0;
    n
    = 0;
    tot
    = 0;
    ok
    = true;
    int a, b;
    scanf(
    "%d%d", &a, &b);
    if (a < 0 && b < 0)
    return 0;
    if (a == 0 && b == 0)
    {
    printf(
    "Case %d is a tree.\n", t);
    continue;
    }
    a
    = find(a);
    b
    = find(b);
    addedge(a, b);
    while (1)
    {
    scanf(
    "%d%d", &a, &b);
    if (a == 0 && b == 0)
    break;
    a
    = find(a);
    b
    = find(b);
    addedge(a, b);
    }
    root
    = -1;
    for (int i = 0; i < n; i++)
    if (in[i] == 0)
    root
    = i;
    if (root >= 0)
    dfs(root);
    if (ok && tot == n && root >= 0)
    printf(
    "Case %d is a tree.\n", t);
    else
    printf(
    "Case %d is not a tree.\n", t);
    }
    return 0;
    }

  • 相关阅读:
    c语言程序设计(学生成绩管理系统)————提供给计算机系c语言初学者参考
    C语言之指针排序
    C语言之冒泡法一
    C语言之统计字符
    C语言之while输出菱形
    C语言之do_while输出菱形
    C语言之素数的判断
    C语言之输出菱形
    基于RT-THREAD的定时鱼缸喂食器设计
    dx/dy=1/y’求其二阶导
  • 原文地址:https://www.cnblogs.com/rainydays/p/2086368.html
Copyright © 2020-2023  润新知