• 1596: [Usaco2008 Jan]电话网络


    Description

    Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流。不过,为此FJ必须在奶牛们居住的N(1 <= 
    N <= 10,000)块草地中选一些建上无线电通讯塔,来保证任意两块草地间都存在手机信号。所有的N块草地按1..N 
    顺次编号。 所有草地中只有N-1对是相邻的,不过对任意两块草地A和B(1 <= A <= N; 1 <= B <= N; A != B),都
    可以找到一个以A开头以B结尾的草地序列,并且序列中相邻的编号所代表的草地相邻。无线电通讯塔只能建在草地
    上,一座塔的服务范围为它所在的那块草地,以及与那块草地相邻的所有草地。 请你帮FJ计算一下,为了建立能
    覆盖到所有草地的通信系统,他最少要建多少座无线电通讯塔。

    Input

    * 第1行: 1个整数,N
    * 第2..N行: 每行为2个用空格隔开的整数A、B,为两块相邻草地的编号

    Output

    * 第1行: 输出1个整数,即FJ最少建立无线电通讯塔的数目

    Sample Input

    5
    1 3
    5 2
    4 3
    3 5
    输入说明:
    Farmer John的农场中有5块草地:草地1和草地3相邻,草地5和草地2、草地
    4和草地3,草地3和草地5也是如此。更形象一些,草地间的位置关系大体如下:
    (或是其他类似的形状)
    4 2
    | |
    1--3--5

    Sample Output

    2
    输出说明:
    FJ可以选择在草地2和草地3,或是草地3和草地5上建通讯塔。
     

     
    贪心,如果这一点的儿子都没有被选, 并且它父亲没被选,就选它父亲
     

     
    #include <iostream>
    #include <cstdio>
    using namespace std;
    #define N 10005
    int n;
    struct edge{
        int nxt, to;
    }ed[N*2];
    int head[N], cnt;
    inline int add(int x, int y){
        ed[++cnt] = (edge){head[x], y};
        head[x] = cnt;
    }
    int ans = 0;
    bool mark[N];
    void dfs(int x, int fa)
    {
        bool fl = 0; 
        for (register int i = head[x] ; i ; i = ed[i].nxt){
            int to = ed[i].to;
            if (to == fa) continue;
            dfs(to, x);
            if (mark[to]) fl = 1;
        }
        if (fl == 0 and !mark[x] and !mark[fa]) ans++, mark[fa] = 1;
    }
    int main()
    {
        scanf("%d", &n);
        for (register int i = 1 ; i < n ; i ++)
        {
            int x, y;scanf("%d%d", &x, &y);
            add(x, y), add(y, x);
        }
        dfs(1, 0);
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    jmeter主要函数助手功用说明
    性能测试的分类
    monkey基础
    读《复盘-对过去的事情做思维演练—陈中(著)》感知
    关于postman各功能的说明及用法以及批量执行
    python接口测试-认识POST请求
    关于python3.6上传文件时报错:HTTPSConnectionPool(host='***.org', port=443): Max retries exceeded with url: /post (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAIL解决办法
    [Tips] Mobaxterm添加本地python使用
    [Tips] docker run时运行shell命令
    [Tips] shell 输入输出重定向
  • 原文地址:https://www.cnblogs.com/BriMon/p/9314798.html
Copyright © 2020-2023  润新知