【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 ...
随机推荐
- Spring点滴四:Spring Bean生命周期
Spring Bean 生命周期示意图: 了解Spring的生命周期非常重要,我们可以利用Spring机制来定制Bean的实例化过程. -------------------------------- ...
- JDK中的SimpleDateFormat线程非安全
在JDK中使用SimpleDateFormat的时候都会遇到线程安全的问题,在JDK文档中也说明了该类是线程非安全的,建议对于每个线程都创建一个SimpleDateFormat对象.如下面一个Case ...
- BZOJ 3166: [Heoi2013]Alo
3166: [Heoi2013]Alo Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 923 Solved: 437[Submit][Status] ...
- SSM 小demo的盲点总结
日期Date和String之间的转换: 1. 全局转换器(推荐使用) 1. 创建类实现Converter接口,实现Convert方法 public class StringToDateConvert ...
- 解题:洛谷 p1858 多人背包
题面 设$dp[i][j]$表示容量为$i$时的第$j$优解,因为是优解,肯定$dp[i][j]$是随着$j$增大不断递减的,这样的话对于一个新加进来的物品,它只可能从两个容量的转移的前$k$优解中转 ...
- YBT 6 数学基础
$补+写题ing$ 第 1 章 快速幂 序列的第 k 个数 link $solution:$ 板子 A 的 B 次方 link $solution:$ 板子 [NOIP2013] 转圈游戏 link ...
- ab输出信息解释以及Failed requests原因分析
ab是apache自带的压力测试工具.ab进行的一切测试本质上是基于HTTP的.下面是对ab输出项信息的解释和出现Failed requests原因分析.测试实例:1. ab输出信息说明: 1 2 ...
- 为什么Spring Boot推荐使用logback-spring.xml来替代logback.xml来配置logback日志的问题分析
最根本的原因: 即,logback.xml加载早于application.properties,所以如果你在logback.xml使用了变量时,而恰好这个变量是写在application.proper ...
- Android dumpsys命令详细使用
一.dumpsys命令介绍 1.命令说明 Dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息 命令格式: adb shell dumpsys [system serbices] 2.系 ...
- 博世传感器调试笔记(一)----加速度传感器BMA253
公司是bosch的代理商,最近一段时间一直在公司开发的传感器demo板上调试bosch sensor器件.涉及到的器件有7,8款,类型包括重力加速度.地磁.陀螺仪.温度.湿度.大气压力传感器等.在调试 ...