POJ3417Network
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 5311 | Accepted: 1523 |
Description
Yixght is a manager of the company called SzqNetwork(SN). Now she's very worried because she has just received a bad news which denotes that DxtNetwork(DN), the SN's business rival, intents to attack the network of SN. More unfortunately, the original network of SN is so weak that we can just treat it as a tree. Formally, there are N nodes in SN's network, N-1 bidirectional channels to connect the nodes, and there always exists a route from any node to another. In order to protect the network from the attack, Yixght builds M new bidirectional channels between some of the nodes.
As the DN's best hacker, you can exactly destory two channels, one in the original network and the other among the M new channels. Now your higher-up wants to know how many ways you can divide the network of SN into at least two parts.
Input
The first line of the input file contains two integers: N (1 ≤ N ≤ 100 000), M (1 ≤ M ≤ 100 000) — the number of the nodes and the number of the new channels.
Following N-1 lines represent the channels in the original network of SN, each pair (a,b) denote that there is a channel between node a and node b.
Following M lines represent the new channels in the network, each pair (a,b) denote that a new channel between node a and node b is added to the network of SN.
Output
Output a single integer — the number of ways to divide the network into at least two parts.
Sample Input
- 4 1
- 1 2
- 2 3
- 1 4
- 3 4
Sample Output
- 3
Source

从链的情况开始,红色的边为非树边。首先看1--2这条边,没有任何非树边覆盖,所以要删这条边,
你删任何一条树边都可以,所以这条边对答案的贡献是m。再看4--5这条边,被一条非树边覆盖,如果
删去这条边并且再删去一条非树边,想要使图不连通,只能删覆盖它的非树边,所以当只有一条非树边
覆盖这条边时,这条边对答案的贡献是1。再看2--3这条边,如果删去这条边,想要使图不连通,你删哪条
非树边都是没有用的,图仍会连通。对答案产生贡献的树边的条件是,如果没有被非树边覆盖,产生的
贡献是m,如果被一条非树边覆盖,产生的贡献就是1,即删掉覆盖它的非树边,如果被2及其以上的非树
边覆盖,对答案没有贡献,你删那一条非树边图仍然连通。
好了,我们已经讨论完答案的产生,在说明怎样实现。
进行树上差分来实现每一条树边被几条非树边覆盖。
当一条非树边的端点为u,v时,查分数组dp[u]++,dp[v]++,dp[lca(u,v)]-=2.
然后在dfs一遍求差分数组的后缀和,dp[i]表示i和它父亲相连的这条边被几条非树边覆盖。
最后统计答案即可。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #define maxn 100002
- using namespace std;
- int n,m,sumedge,ans;
- int head[maxn],top[maxn],deep[maxn],dad[maxn],size[maxn],dp[maxn];
- struct Edge{
- int x,y,nxt;
- Edge(int x=,int y=,int nxt=):
- x(x),y(y),nxt(nxt){}
- }edge[maxn<<];
- void add(int x,int y){
- edge[++sumedge]=Edge(x,y,head[x]);
- head[x]=sumedge;
- }
- void dfs(int x){
- size[x]=;deep[x]=deep[dad[x]]+;
- for(int i=head[x];i;i=edge[i].nxt){
- int v=edge[i].y;
- if(v==dad[x])continue;
- dad[v]=x;
- dfs(v);
- size[x]+=size[v];
- }
- }
- void dfs_(int x){
- int s=;
- if(!top[x])top[x]=x;
- for(int i=head[x];i;i=edge[i].nxt){
- int v=edge[i].y;
- if(v!=dad[x]&&size[v]>size[s])s=v;
- }
- if(s){
- top[s]=top[x];
- dfs_(s);
- }
- for(int i=head[x];i;i=edge[i].nxt){
- int v=edge[i].y;
- if(v!=dad[x]&&v!=s)dfs_(v);
- }
- }
- int lca(int x,int y){
- for(;top[x]!=top[y];){
- if(deep[top[x]]>deep[top[y]])swap(x,y);
- y=dad[top[y]];
- }
- if(deep[x]>deep[y])swap(x,y);
- return x;
- }
- void DP(int x){
- for(int i=head[x];i;i=edge[i].nxt){
- int v=edge[i].y;
- if(v==dad[x])continue;
- DP(v);
- dp[x]+=dp[v];
- }
- }
- int main(){
- scanf("%d%d",&n,&m);
- for(int i=;i<n;i++){
- int x,y;
- scanf("%d%d",&x,&y);
- add(x,y);add(y,x);
- }
- dfs();dfs_();
- for(int i=;i<=m;i++){
- int x,y;
- scanf("%d%d",&x,&y);
- dp[x]++;dp[y]++;
- dp[lca(x,y)]-=;
- }
- DP();
- for(int i=;i<=n;i++){
- if(dp[i]==)ans+=m;
- else if(dp[i]==)ans++;
- //cout<<dp[i]<<endl;
- }
- cout<<ans<<endl;
- return ;
- }
POJ3417Network的更多相关文章
- poj3417Network【LCA】【树形DP】
Yixght is a manager of the company called SzqNetwork(SN). Now she's very worried because she has jus ...
- POJ3417Network(LCA+树上查分||树剖+线段树)
Yixght is a manager of the company called SzqNetwork(SN). Now she's very worried because she has jus ...
随机推荐
- 【BZOJ3991】[SDOI2015]寻宝游戏 树链的并+set
[BZOJ3991][SDOI2015]寻宝游戏 Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩 ...
- 爬虫入门【3】BeautifulSoup4用法简介
快速开始使用BeautifulSoup 首先创建一个我们需要解析的html文档,这里采用官方文档里面的内容: html_doc = """ <html>< ...
- Lifting the Stone(多边形重心)
Lifting the Stone Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- ElasticSearch(十七)初识倒排索引
现在有两条document: doc1:I really liked my small dogs, and I think my mom also liked them. doc2:He never ...
- sqlite增删改查 SimpleCursorAdapter 事务
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- 还原sqlserver2008 r2 数据库步骤
1: 有备份文件bak 文件(是在sqlserver2008 r2上备份的) 数据库下载地址(讯雷) ed2k://|file|cn_sql_server_2008_r2_express_with_m ...
- SUBMIT 用法
[转自http://lz357502668.blog.163.com/blog/static/16496743201241195817597/] 1.最普通的用法 *Code used to exec ...
- 关于matlab曲线拟合的问题
matlab 曲线拟合工具箱,app->curve fitting 可以使用generate直接产生代码,生成的是函数 该函数直接返回的结果为cfit格式,直接读取不了,网上有网友说可以采用y ...
- Django与Vue语法冲突问题完美解决方法
当我们在django web框架中,使用vue的时候,会遇到语法冲突. 因为vue使用{{}},而django也使用{{}},因此会冲突. 解决办法1: 在django1.5以后,加入了标签: {% ...
- eclipse的问题:如何在debug模式下,能始终看到某变量的值
Window—>Show View—>other—>Debug—>Expressions中左边是变量名,右边显示变量value.