【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 ...
随机推荐
- mysql查看表中列信息
查看所有数据库中所有表的数据库名和表名 SELECT `TABLES`.`TABLE_SCHEMA`, `TABLES`.`TABLE_NAME` FROM `information_schema`. ...
- 【刷题】BZOJ 1537 [POI2005]Aut- The Bus
Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...
- 51nod 1353 树 | 树形DP经典题!
51nod 1353 树 | 树形DP好题! 题面 切断一棵树的任意条边,这棵树会变成一棵森林. 现要求森林中每棵树的节点个数不小于k,求有多少种切法. 数据范围:\(n \le 2000\). 题解 ...
- linux内核分析综合总结
linux内核分析综合总结 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 ...
- R语言缺失值高级处理方法
0 引言 对于一些数据集,不可避免的出现缺失值.对缺失值的处理非常重要,它是我们能否继续进行数据分析的关键,也是能否继续大数据分析的数据基础. 1 缺失值分类 在对缺失数据进行处理前,了解数据缺失的机 ...
- python【数据类型:字典】
字典的定义 infos = {'name':'张晓红','sex':'女','address':'上海','age':18} stus = {"name":"张三&quo ...
- Autolayout下使用代码改变frame无效
在使用自动布局的情况下,子视图的边框无法改变.就算调用setFrame方法也不会有效果.自动布局引擎对于子视图的大小和位置有最终的决定权.如果你需要在运行时改变边框,那就得用NSLayoutConst ...
- 转:UIViewController中各方法调用顺序及功能详解
UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear ...
- @Controller,@Service,@Repository,@Component详解
@Controller 用来表示一个web控制层bean,如SpringMvc中的控制器. @Service 用来表示一个业务层bean. @Repository 用来表示一个持久层bean,即数据访 ...
- .net WebService 大数据量时性能的提高
1.直接返回DataSet对象 [WebMethod(Description = "直接返回DataSet对象")] public DataSet GetUserListDateS ...