POJ 3417 Network
每条额外的边加入到图中,会导致树上一条路径成环,假设没有其余边,那么要将新图分成两部分,如果想删一条成环路径上的边,那么必须把这条额外边也删除。
因此每条额外边加入时,只需将环上的边+1。最后看看每条边被加了几次,被加了x次,也就是说删除这条边,至少还要删除x条边才能被分成两半,如果一次都没有被加,意味着这条边删了就分成两半了,对答案的贡献为m;如果被加了一次,那么对答案的贡献为1;如果被加的次数超过1,那么对答案没有贡献。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
inline int read()
{
char c = getchar(); while(!isdigit(c)) c = getchar();
int x = ;
while(isdigit(c)) { x = x * + c - ''; c = getchar(); }
return x;
} const int maxn=+;
int n,m,cnt,h[maxn],f[maxn];
struct Edge{int to,nx;}e[*maxn];
bool flag[maxn]; void AddEdge(int u,int v)
{
e[cnt].to=v; e[cnt].nx=h[u]; h[u]=cnt++;
} void dfs(int x)
{
flag[x]=;
for(int i=h[x];i!=-;i=e[i].nx)
{
if(flag[e[i].to]) continue;
dfs(e[i].to); f[x]=f[x]+f[e[i].to];
}
} int F[*maxn],B[*maxn],pos[maxn];
int rmq[maxn*][],done; void DFS(int u,int p,int dep)
{
F[++done]=u,B[done]=dep;
pos[u]=done;
for(int son=h[u];son!=-;son=e[son].nx)
{
int v=e[son].to;
if(v==p)continue;
DFS(v,u,dep+);
F[++done]=u,B[done]=dep;
}
} void initRMQ()
{
for(int i=;i<=done;i++)rmq[i][]=i;
for(int j=;(<<j)<=done;j++)
for(int i=;i+(<<j)-<=done;i++)
if(B[rmq[i][j-]]<B[rmq[i+(<<(j-))][j-]])rmq[i][j]=rmq[i][j-];
else rmq[i][j]=rmq[i+(<<(j-))][j-];
} int LCA(int a,int b)
{
a=pos[a],b=pos[b];
if(a>b)swap(a,b);
int k=log(1.0+b-a)/log(2.0);
if(B[rmq[a][k]]<B[rmq[b-(<<k)+][k]])return F[rmq[a][k]];
else return F[rmq[b-(<<k)+][k]];
} int main()
{
scanf("%d%d",&n,&m);
done=cnt=; memset(h,-,sizeof h);
for(int i=;i<n-;i++)
{
int u,v; scanf("%d%d",&u,&v);
AddEdge(u,v); AddEdge(v,u);
}
DFS(,,); initRMQ();
for(int i=;i<=m;i++)
{
int u,v; scanf("%d%d",&u,&v);
f[u]++; f[v]++; f[LCA(u,v)]-=;
}
dfs(); int ans=;
for(int i=;i<=n;i++)
{
if(f[i]==) ans=ans+m;
else if(f[i]==) ans=ans+;
}
printf("%d\n",ans);
return ;
}
POJ 3417 Network的更多相关文章
- poj 3417 Network(tarjan lca)
poj 3417 Network(tarjan lca) 先给出一棵无根树,然后下面再给出m条边,把这m条边连上,然后每次你能毁掉两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂. 我们设 ...
- 【题解】POJ 3417 Network(倍增求LCA+DP+树上差分)
POJ3417:http://poj.org/problem?id=3417 思路 我们注意到由“主要边”构成一颗树 “附加边”则是非树边 把一条附加边(x,y)加入树中 会与树上x,y之间构成一个环 ...
- poj 3417 Network 题解
题意: 先给出一棵树,然后再给出m条边,把这m条边连上,然后剪掉两条边,一条是原边,一条是新边,问有多少种方案能使图不连通. 思路: 从原边的角度看 1.树加边,一定成环,加一条(u,v)边就有u-& ...
- poj 3417 Network (LCA,路径上有值)
题意: N个点,构成一棵树.给出这棵树的结构. M条边,(a1,b1)...(am,bm),代表给树的这些点对连上边.这样就形成了有很多环的一个新"树". 现在要求你在原树中断一条 ...
- POJ 1236 Network of Schools(强连通 Tarjan+缩点)
POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意: 给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...
- ZOJ 1542 POJ 1861 Network 网络 最小生成树,求最长边,Kruskal算法
题目连接:problemId=542" target="_blank">ZOJ 1542 POJ 1861 Network 网络 Network Time Limi ...
- POJ 1236 Network of Schools(强连通分量)
POJ 1236 Network of Schools 题目链接 题意:题意本质上就是,给定一个有向图,问两个问题 1.从哪几个顶点出发,能走全全部点 2.最少连几条边,使得图强连通 思路: #inc ...
- Poj 3694 Network (连通图缩点+LCA+并查集)
题目链接: Poj 3694 Network 题目描述: 给出一个无向连通图,加入一系列边指定的后,问还剩下多少个桥? 解题思路: 先求出图的双连通分支,然后缩点重新建图,加入一个指定的边后,求出这条 ...
- Poj 1236 Network of Schools (Tarjan)
题目链接: Poj 1236 Network of Schools 题目描述: 有n个学校,学校之间有一些单向的用来发射无线电的线路,当一个学校得到网络可以通过线路向其他学校传输网络,1:至少分配几个 ...
随机推荐
- html5获取图片的宽高
var fr = new FileReader; fr.readAsDataURL($("#inputFileId").files[0]); fr.onload = functio ...
- CVE-2015-5122 简要分析(2016.4)
CVE-2015-5122 简要分析 背景 最近在学习Flash漏洞的分析,其与IE漏洞的分析还是有诸多的不同(不便)之处,折腾了一阵子终于克服了没有符号表.Flash的超时定时器等问题.所以找到了去 ...
- Java中新建子文件夹和新建文件
File file = new File("地址"); file.mkdirs(); //新建文件夹,当没有父文件夹时,但是不会自动创建父文件夹 file.mkdirs(); // ...
- util:properties与context:property-placeholder
spring 使用注解装配的Bean如何使用property-placeholder属性配置中的值 这个问题不大不小,以前偷懒凡是碰到需要引用属性文件中的类时就改用xml来配置. 今天看了下sprin ...
- Design Pattern——开放封闭原则
两个特征: 1.对于扩展是开放的 2.对于更改是封闭的 意思就是说:程序在设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果有新的需求来,我们就增加一个类来解决问题,而不要更改原 ...
- https请求时出错:Could not establish trust relationship for the SSL/TLS secure channel
当我在用NET命名空间下获取URL的时候,提示如下错误: The underlying connection was closed: Could not establish trust relatio ...
- How to solve java.net.SocketTimeoutException:60000millis problem in HDFS
Many HDFS users encounter the following error when DFSClient ready file from a certain Data Node. & ...
- java 用双向链表实现SJBLinkedList
public class SJBLinkedList{ private Node first; private Node last; private int size; public int size ...
- asp.net学习视频资料地址链接
ASP.NET开发学习视频教程大全(共800集) http://felix520wj.blog.51cto.com/7129746/1548458 http://study.163.com/cours ...
- IOS中实例的权限控制
@public.@protected.@private的使用 在OC中声明一个类的时候,可以使用上面 @public.@protected.@private三个关键字声明实例的权限,例如下面的代码: ...