【hdu6334】【2018Multi-University-Training Contest04】Problem C. Problems on a Tree
维护1边的联通块和2边的联通块,合并的时候直接启发式合并。
cdqz的大爷好强啊。
#include<bits/stdc++.h>
#define lson (o<<1)
#define rson (o<<1|1)
#define fi first
#define sc second
#define dbg(x) cout<<#x<<" = "<<(x)<<endl;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
using namespace std;
const double pi=acos(-);
const double eps=1e-;
inline int lowbit(int x){return x&(-x);}
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
template<typename T> inline T max(T x,T y,T z){return max(max(x,y),z);}
template<typename T> inline T min(T x,T y,T z){return min(min(x,y),z);}
template<typename T> inline T sqr(T x){return x*x;}
template<typename T> inline void checkmax(T &x,T y){x=max(x,y);}
template<typename T> inline void checkmin(T &x,T y){x=min(x,y);}
template<typename T> inline void read(T &x){
x=;T f=;char ch;do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do x=x*+ch-'',ch=getchar();while(ch<=''&&ch>='');x*=f;
}
template<typename A,typename B,typename C> inline A fpow(A x,B p,C yql){
A ans=;
for(;p;p>>=,x=1LL*x*x%yql)if(p&)ans=1LL*x*ans%yql;
return ans;
}
struct FastIO{
static const int S=;
int wpos;char wbuf[S];
FastIO():wpos() {}
inline int xchar(){
static char buf[S];
static int len=,pos=;
if(pos==len)pos=,len=fread(buf,,S,stdin);
if(pos==len)return -;
return buf[pos++];
}
inline int read(){
int c=xchar(),x=;
while(c<=&&~c)c=xchar();
if(c==-)return -;
for(;''<=c&&c<='';c=xchar())x=x*+c-'';
return x;
}
}io;
//#define read io.read
const int N=;
int add[N],tag2[N],fa1[N],fa2[N],size1[N],size2[N],fa[N],d[N];
int n,m;
vector<int> G[N];
inline int find(int *fa,int x){return x==fa[x]?x:fa[x]=find(fa,fa[x]);}
inline void merge2(int x,int y){
int xx=find(fa1,x),yy=find(fa1,y);
if(d[xx]<d[yy])swap(xx,yy);
add[yy]-=size2[xx];yy=find(fa2,yy);
fa2[xx]=yy;size2[yy]+=size2[xx];
add[find(fa1,fa[yy])]+=size2[xx];
}
inline void merge1(int x,int y){
int xx=find(fa1,x),yy=find(fa1,y);
if(d[xx]<d[yy])swap(xx,yy);
fa1[xx]=yy;size1[yy]+=size1[xx];
add[yy]+=add[xx];
}
inline void dfs(int u){
d[u]=d[fa[u]]+;
add[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==fa[u])continue;
fa[v]=u;dfs(v);add[u]++;
}
}
vector<pair<int,int> >p1,p2;
inline void clear(){
memset(add,,sizeof(add));
for(int i=;i<=n;i++){
fa1[i]=i;fa2[i]=i;size1[i]=;size2[i]=;G[i].clear();
}
p1.clear();p2.clear();
}
inline void work(){
for(int i=;i<n;i++){
int u=read(),v=read(),w=read();
G[u].push_back(v);G[v].push_back(u);
if(w==){
p1.push_back(make_pair(u,v));
//merge2(u,v);merge1(u,v);
}
else if(w==)p2.push_back(make_pair(u,v));
}
dfs();
for(int i=;i<p1.size();i++){
pair<int,int> p=p1[i];
merge2(p.fi,p.sc);merge1(p.fi,p.sc);
}
for(int i=;i<p2.size();i++){
pair<int,int> p=p2[i];
merge2(p.fi,p.sc);
}
while(m--){
int u=read(),v=read(),t=read(),s=read();
u=find(fa1,u);v=find(fa1,v);
if(u!=v){
if(find(fa2,u)==find(fa2,v))merge1(u,v);
else merge2(u,v);
}
s=find(fa1,s);t=find(fa1,t);int flag=;
if(find(fa2,s)==find(fa2,t))printf("1 "),flag=;
else{
if(d[find(fa2,s)]>d[find(fa2,t)]){
if(find(fa1,fa[find(fa2,s)])==t)printf("1 "),flag=;
}
else if((t==find(fa2,t)&&find(fa2,fa[t])==find(fa2,s)))printf("1 "),flag=;
}
if(!flag)printf("0 ");
printf("%d\n",size2[find(fa2,t)]+add[t]+(t==find(fa2,t)?size2[find(fa2,fa[t])]:));
}
}
int main(){
int T=read();
while(T--){
n=read();m=read();
clear();
work();
}
}
【hdu6334】【2018Multi-University-Training Contest04】Problem C. Problems on a Tree的更多相关文章
- 【微信小程序开发•系列文章六】生命周期和路由
这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...
- WCF学习系列二---【WCF Interview Questions – Part 2 翻译系列】
http://www.topwcftutorials.net/2012/09/wcf-faqs-part2.html WCF Interview Questions – Part 2 This WCF ...
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
- 【刷题记录】 && 【算法杂谈】折半枚举与upper_bound 和 lower_bound
[什么是upper_bound 和 lower_bound] 简单来说lower_bound就是你给他一个非递减数列[first,last)和x,它给你返回非递减序列[first, last)中的第一 ...
- SQL Server 解读【已分区索引的特殊指导原则】(3) - 非聚集索引分区
一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...
- SQL Server 解读【已分区索引的特殊指导原则】(2)- 唯一索引分区
一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...
- WCF学习系列三--【WCF Interview Questions – Part 3 翻译系列】
http://www.topwcftutorials.net/2012/10/wcf-faqs-part3.html WCF Interview Questions – Part 3 This WCF ...
- WCF学习系列四--【WCF Interview Questions – Part 4 翻译系列】
WCF Interview Questions – Part 4 This WCF service tutorial is part-4 in series of WCF Interview Qu ...
- Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】
原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...
随机推荐
- Day24-part1-原生Ajax
参考老师博客:http://www.cnblogs.com/wupeiqi/articles/5703697.html 主要讲了:发数据的3种方式以及上传文件的3种方式.(后续需要总结) 一,原生Aj ...
- Linux中cd test和cd /test以及类似命令的区别
一.加“/”的区别 今天重拾Linux的学习!按照书上,在tmp下,创建文件夹,命令如下: mkdir -p /test1/test2 结果使用下面两行命令结果不同,就对是否加“/”有了疑问,就去百度 ...
- BZOJ3688 折线统计 【dp + BIT】
题目链接 BZOJ3688 题解 将点排序 设\(f[i][j][0|1]\)表示以第\(i\)点结尾,有\(j\)段,最后一段上升或者下降的方案数 以上升为例 \[f[i][j][0] = \sum ...
- 洛谷 P3205 [HNOI2010]合唱队 解题报告
P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为 ...
- 单点登录(十五)-----实战-----cas4.2.x登录mongodb验证方式实现自定义加密
我们在前一篇文章中实现了cas4.2.x登录使用mongodb验证方式. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程 也学习参考了cas5.0.x版 ...
- 前端学习 -- Css -- 属性选择器
属性选择器:根据元素的属性选择指定元素 语法:[属性名] 选取含有指定属性的元素 [属性名="属性值"]:选取属性值等于指定值的元素 [属性名^="属性值"]: ...
- golang package log
package main import ( "log" "os" ) var logger *log.Logger func main() { file, er ...
- pg数据库杀掉连接
遇到异常连接时,需要将对应连接杀掉,可能是连接占用了过多CPU或是IO,影响了业务,或是时间过长的空闲事务. pg对于杀掉连接提供了专门的命令,一般情况下使用pg_cancel_backend就可以, ...
- 主角场景Shader效果:遮挡透明
基本原理:被遮挡的部分关闭深度写入, 显示透明效果:未被遮挡的部分不关闭深度测试,显示正常贴图效果,即使用两个Pass即可. Pass1:关闭深度写入(ZWrite Off),深度测试渲染较远的物体, ...
- Chapter 4(栈与队列)
1.栈的顺序存储结构 //*********************************stack_array.h************************************ #ifn ...