【SRM-05 B】无题?

Description

有一个拥有n个城市的国家。这个国家由n-1条边连接起来。有一天国家发生叛乱。叛军已占领了一些城市。如果叛军占领的城市中,存在两个城市之间有边直接相连,则称这种情况是坏的。现在并不知道叛军占领了那些城市,问有多少种情况是坏的?

Input

第1行一个正整数n,表示国家的大小

第2行到第n行,每行两个数字x, y,表示x,y之间有一条边。

Output

一个整数表示方案数,答案对(1e9+7)取模

Sample Input

2

1 2

Sample Output

1

HINT

1 <= n <= 1e5,1<=x,y<=n,x≠y

以下题解搬运自出题人yyl:“直接做dp应该也是可以的。但是补集转化之后,我们发现其实就是问从点集V中选出若干个点构成点集S,满足S是一个独立集(即S中任意两点没有边直接相连)。设方案数为x。答案就是2^n -x。”

补充:最后输出2^n -x时因为涉及取模,要注意处理负数的情况。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define ll long long
 5 using namespace std;
 6 const int N=1e5+5;
 7 const int mod=1e9+7;
 8 int n,x,y,cnt,head[N];
 9 struct edge{int to,next;}e[N*2];
10 ll ansn=1,dp[N][2];
11 int read()
12 {
13     int x=0,f=1;char c=getchar();
14     while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
15     while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
16     return x*f;
17 }
18 void ins(int u,int v){cnt++;e[cnt].to=v;e[cnt].next=head[u];head[u]=cnt;}
19 void solve(int x,int fa)
20 {
21     dp[x][1]=dp[x][0]=1;
22     for(int i=head[x];i;i=e[i].next)
23     {
24         int to=e[i].to;
25         if(to==fa)continue;
26         solve(to,x);
27         dp[x][0]=(dp[to][0]+dp[to][1])%mod*dp[x][0]%mod;
28         dp[x][1]=dp[to][0]*dp[x][1]%mod;
29     }
30 }
31 int main()
32 {
33     n=read();
34     for(int i=1;i<n;i++)
35     {
36         x=read();y=read();
37         ins(x,y);ins(y,x);
38     }
39     solve(1,0);
40     for(int i=1;i<=n;i++)ansn=(ansn*2)%mod;
41     printf("%lld",((ansn-dp[1][0]-dp[1][1])%mod+mod)%mod);
42     return 0;
43 }

时间: 2024-09-30 02:46:37

【SRM-05 B】无题?的相关文章

汕头市队赛 yyl杯1 T1

A SRM 05 - YYL 杯 R1 背景 傻逼题 描述 给一个序列,序列里只有两种元素1和2.现在要从序列里选出一些非空子序列使得子序列里两种元素数量相同.问有多少种方案数? 输入格式 多组数据 第一行一个正整数T,表示数据组数. 每组数据内 第一行 两个个正整数n,表示序列的长度 第二行 n个数字,表示整个序列. 输出格式 一个整数,表示方案数(mod 1e9+7). 样例输入 1 3 2 2 1 样例输出 2 数据范围与约定 样例解释 在第一个样例中,两个子序列分别为{1,3},{2,3

汕头市队赛 SRM 09 A 撕书

A 撕书I-3 SRM 09 背景&&描述 琉璃在撕书.     书总共有n页,都悬浮在数轴上,第i页的位置为,上面写着一个数字.     琉璃从右往左撕书.假如看到了第i页,就把在第i页左边,且与之距离<=的书都撕掉.(第i页本身不撕)     夜子为了尽量地保全魔法书,决定偷偷在琉璃开始撕之前,增加一页.增加的这一页必须在所有书页的右边,数字随意.     夜子想知道,最少会有多少页书被撕毁. 输入格式 第一行一个整数n,表示书页数. 接下来n行,第i行的俩整数分别为和. 输出格

我与小娜(05):变换时空,重返北京

我与小娜(05):变换时空,重返北京?       2月5日早上6点,我用手拍了一下“小口袋”,说:出来吧!小娜从袋子里面把紧闭的袋口打开,探出头来,看了我一眼,然后对着说:你是谁啊?       为什么小娜不认识我了?我是谁?……我也不记得自己是谁了?头脑里面一片空白,……突然之间,我明白了一个道理:物理因果关系是不能颠倒的,即便借助量子纠缠超距作用,也不能远距离传递传统信息,难怪小娜不认识我了,因为我的帐号没有传递给她.我自己也是头脑空白,一片无知,……       所幸的是,在小娜容身的“

修炼爱情05

今天你的心情好些了,感觉没有了前几天的烦躁,生活各种事情参杂在一起的时候,人就是容易迷惑和忧郁,但是人是很强大的动物,我们不是慢慢的就走出忧郁,回归到现实的生活嘛?好好和爱人的人一起渡过难关,每一个在乎你的人都会与你同在,不管任何形式,任何方式,心总在一起,慢慢的都会好起来的,兰,今天我加班了,听到你的消息很安心,脑子终于好使了,Your are my angle,I love you. 修炼爱情05,布布扣,bubuko.com

汕头市队赛 SRM 09 B 撕书

B 撕书II-3 SRM 09 背景&&描述 琉璃手头有一黑一白两本魔法书,一本是<缟玛瑙的不在证明>,另一本是<白色相簿1.5>     传说同时打开这两本书会有奇怪的事情发生.     琉璃打开一看,果然非常奇怪:两本书上都各自写着一个正整数(可能他买到盗版了),分别是a和b.     试图撕书的汀想借过来看看,但琉璃只告诉了他这俩数加起来的值x和异或起来的值y.     汀发现有很多种(a,b)满足琉璃告诉他的信息...你能帮他算出来有多少种吗? 输入格式 两

无题吧

总想写点东西,不知道取什么标题好,就叫无题吧. 估计以后写的会和这重名很多. 我知道,我现在这种感觉是一种失落,大概和传说中的失恋查差不多,可我又并没有真正失恋过,所以说,只能说是传说中. 其实我已经和你说了一切,可你似乎并未察觉,也许是心境不一样,也许,也许,一切的一切,都是我想多了,谁在意呢. 我说所有人,所有事都一样,开始的时候,都很happy,我们都知道这个道理,可是,开始之后呢.我并不是以一个经常"开始"的人.所以,有时候对逝去的那些happy,总是缅怀. 我知道你的那些小把

Openwrt15.05网关后pptp外拨失败的解决办法

路由器升级openwrt chaos_calmer 15.05版后发现NAT后面的客户端外拨pptp vpn服务器失败,经google后得知,在14.07版本中默认安装的又一个叫做 kmod-ipt-nathelper-extra 的软件包,该软件包实现了pptp客户端穿透openwrt网关的功能,而到了15.05版后,该软件包不在默认安装,且该软件包已改名为  kmod-nf-nathelper-extra,重新安装回来就行了: opkg install kmod-nf-nathelper-e

1098: 零起点学算法05——除法算术题

1098: 零起点学算法05--除法算术题 Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitted: 2346  Accepted: 1932[Submit][Status][Web Board] Description 乘法会了,除法也一样的.不要跟我说不会哦. Input 没有输入 Output 输出12除以2的值,计算让计算机去做哦 Sample Output 6 Source 零起点学算法 1 #i

Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对LinkedList有个整体认识,然后再学习它的源码:最后再通过实例来学会使用LinkedList.内容包括:第1部分 LinkedList介绍第2部分 LinkedList数据结构第3部分 LinkedList源码解析(基于JDK1.6.0_45)第4部分 LinkedList遍历方式第5部分 LinkedL

NOI题库05 派

05:派 Description 我的生日要到了!根据习俗,我需要将一些派分给大家.我有N个不同口味.不同大小的派.有F个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成:可以是一整个派). 我的朋友们都特别小气,如果有人拿到更大的一块,就会开始抱怨.因此所有人拿到的派是同样大小的(但不需要是同样形状的),虽然这样有些派会被浪费,但总比搞砸整个派对好.当然,我也要给自己留一块,而这一块也要和其他人的同样大小. 请问我们每个人拿到的派最大是多少?每个派都是一个高为