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:至少分配几个 ...
随机推荐
- Codeforces Round #346 (Div. 2) C Tanya and Toys
C. Tanya and Toys 题目链接http://codeforces.com/contest/659/problem/C Description In Berland recently a ...
- 最近遇到的两个IE下的问题(IE兼容问题)
最近遇到了两个IE下的兼容问题(产品目前还需要兼容IE8,所以没办法,运行效果虽然不好,但是也仍然兼容着吧) 问题描述: 1, 在更改IE窗口的时候,反应非常慢,甚至卡死 2, 在chrome运行正常 ...
- Hadoop Datanode 机器缺失 VD 问题修复尝试
背景: 新集群 Datanode 使用两个 SSD 做 raid 1 作为根磁盘,12 个 SAS 单独做 raid 0 作为数据盘,在机器部署完毕后,缺发现 PD slot 4 和 slot 5 丢 ...
- Location-aware Associated Data Placement for Geo-distributed Data-intensive Applications--INFOCOM 2015
[标题] [作者] [来源] [对本文评价] [why] 存在的问题 [how] [不足] assumption future work [相关方法或论文] [重点提示] [其它]
- 关于System.currentTimeMillis()
一.时间的单位转换 1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)1秒=1,000,000,000 纳秒(ns ...
- mysql B+树 Cardinality MRR
B+树索引并不能找到一个给定键值的具体行,而是被查找数据行所在的页.然后数据库通过把页读入到内存,再在内存中进行查找,最后得到想要查找的数据. Show index from table. Cardi ...
- Deploy Django in Windows
配置 安装目录 D:\PythonWebSW\(免安装) d:\Program Files\ (安装版) 工作目录 E:/PythonWeb/code 项目名称 voith_sales Insta ...
- Java jvm 原理
1.Java语言运行的过程 Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在OS之上的Java解释器中解释执行. 也相当与 ...
- LeetCode OJ 62. Unique Paths
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- Dot Product
These are vectors: They can be multiplied using the "Dot Product" (also see Cross Product) ...