洛谷P2899 [USACO08JAN]手机网络Cell Phone Network

P2899 [USACO08JAN]手机网络Cell Phone Network

题目描述

Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to set up cell phone towers on his N (1 ≤ N ≤ 10,000) pastures (conveniently numbered 1..N) so they can all communicate.

Exactly N-1 pairs of pastures are adjacent, and for any two pastures A and B (1 ≤ A ≤ N; 1 ≤ B ≤ N; A ≠ B) there is a sequence of adjacent pastures such that A is the first pasture in the sequence and B is the last. Farmer John can only place cell phone towers in the pastures, and each tower has enough range to provide service to the pasture it is on and all pastures adjacent to the pasture with the cell tower.

Help him determine the minimum number of towers he must install to provide cell phone service to each pasture.

John想让他的所有牛用上手机以便相互交流(也是醉了。。。),他需要建立几座信号塔在N块草地中。已知与信号塔相邻的草地能收到信号。给你N-1个草地(A,B)的相邻关系,问:最少需要建多少个信号塔能实现所有草地都有信号。

输入输出格式

输入格式:

  • Line 1: A single integer: N
  • Lines 2..N: Each line specifies a pair of adjacent pastures with two space-separated integers: A and B

输出格式:

  • Line 1: A single integer indicating the minimum number of towers to install

输入输出样例

输入样例#1:

5
1 3
5 2
4 3
3 5

输出样例#1:

2
/*
    f[i][0]表示节点i不选但被覆盖
    f[i][1]表示节点i选
    f[i][2]表示节点i不选也不被覆盖
*/
#include<iostream>
#include<cstdio>
#define maxn 10010
#define INF 2000000000
using namespace std;
int f[maxn][3],n,num,head[maxn];
struct node{
    int to,pre;
}e[maxn*2];
void Insert(int from,int to){
    e[++num].to=to;
    e[num].pre=head[from];
    head[from]=num;
}
void dfs(int now,int father){
    int f0=INF,f2=0,f1=0,w=0,s=0;
    for(int i=head[now];i;i=e[i].pre){
        int to=e[i].to;
        if(to==father)continue;
        dfs(to,now);
        s=min(f[to][0],f[to][1]);
        w+=s;
        f0=min(f0,f[to][1]-s);
        f1+=min(f[to][1],min(f[to][0],f[to][2]));
        if(f2<INF)f2+=f[to][0];
    }
    f[now][1]=f1+1;f[now][2]=f2;
    if(f0==INF)f[now][0]=INF;
    else f[now][0]=w+f0;
}
int main(){
    int x,y;
    scanf("%d",&n);
    for(int i=1;i<n;i++){
        scanf("%d%d",&x,&y);
        Insert(x,y);
        Insert(y,x);
    }
    dfs(1,0);
    int ans=min(f[1][1],f[1][0]);
    cout<<ans;
}
时间: 2024-11-07 11:45:57

洛谷P2899 [USACO08JAN]手机网络Cell Phone Network的相关文章

洛谷 P2899 [USACO08JAN]手机网络Cell Phone Network(树形动规)

题目描述 Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to set up cell phone towers on his N (1 ≤ N ≤ 10,000) pastures (conveniently numbered 1..N) so they can all

P2899 [USACO08JAN]手机网络Cell Phone Network

题意: 一棵 n 个点的无权树,求最?点覆盖 思路: 那么,我们考虑一个结点可以被谁染色,不难想出,可以有3种情况:被自己染色,被儿子染色,被父亲染色 我们不妨设: f[i][0] 代表被自己染色      f[i][1] 代表被父亲染色       f[i][2] 代表被儿子染色 设当前节点是 u ,儿子节点是 v 我们来考虑下转移方程: 1自己被自己染色 这时我们可以想一下,u被自己染色可以由什么转移过来,如果u已经被自己染色了的话,他的儿子v可以选择自己染色,也可以选择被自己的儿子染色,当

[USACO08JAN]手机网络Cell Phone Network

[USACO08JAN]手机网络Cell Phone Network 题目描述 Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to set up cell phone towers on his N (1 ≤ N ≤ 10,000) pastures (convenie

洛谷 P1948 [USACO08JAN]电话线Telephone Lines

P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is uncooperative, so he needs to pay for some of the cables required to connect his farm to the phone system. There a

【洛谷1262】间谍网络

tarjan缩点后找入度为零的强连通分量,加上它的sum即可 但注意到还有NO的可能, 所以大致有两种方法: 1.tarjan之前先来一遍bfs 2.tarjan内加一个数组维护最小编号 貌似前者比较好写qwq 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int N=3010,M=6020; 5 const int novis=-1,nowvis=1,over=0; 6 int valu

洛谷 U6850 手机密码

U6850 手机密码 题目背景 小明的手机上设了一个由四个数字组成的密码,但是小明自己的记性不好,但又不想把密码直接记在纸上,于是便想了一个方法. 题目描述 小明有四行数字,每行数字都有n[i](<=250)位,第i行的数字代表着小明密码的第i位,小明密码的转换的方法是这样的:将这个数各位上的数加起来,会得到一个新数,重复这个操作,直到这个新数小于10. n[i]不在输入中 输入输出格式 输入格式: 共四行,每行一个数. 输出格式: 一个数,表示 小明的四位数密码. 输入输出样例 输入样例#1:

洛谷 P2764 LibreOJ 6002 最小路径覆盖问题

题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开始,长度也是任意的,特别地,可以为0.G 的最小路径覆盖是G 的所含路径条数最少的路径覆盖.设计一个有效算法求一个有向无环图G 的最小路径覆盖.提示:设V={1,2,.... ,n},构造网络G1=(V1,E1)如下: 每条边的容量均为1.求网络G1的( 0 x , 0 y )最大流. «编程任务:

[洛谷OJ] P1114 “非常男女”计划

洛谷1114 “非常男女”计划 本题地址:http://www.luogu.org/problem/show?pid=1114 题目描述 近来,初一年的XXX小朋友致力于研究班上同学的配对问题(别想太多,仅是舞伴),通过各种推理和实验,他掌握了大量的实战经验.例如,据他观察,身高相近的人似乎比较合得来. 万圣节来临之际,XXX准备在学校策划一次大型的“非常男女”配对活动.对于这次活动的参与者,XXX有自己独特的选择方式.他希望能选择男女人数相等且身高都很接近的一些人.这种选择方式实现起来很简单.

洛谷P1726 上白泽慧音

P1726 上白泽慧音 124通过 343提交 题目提供者yeszy 标签图论 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 给两组数据吧! 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间之里由N个村庄(编号为1..N)和M条道路组成,道路分为两种一种为单向通行的,一种为双向通行的,分别用1和2来标记.如果存在由村庄A到达村庄B的通