当前位置:网站首页>【acwing】240. food chain
【acwing】240. food chain
2022-07-05 04:41:00 【The wind is a little strong】
subject
Train of thought
How to merge different query sets , For the same kind (1) Come on :
For different classes (2) Come on :
Code 1
#include<iostream>
using namespace std;
const int N=50005;
int p[N],d[N];
int n,m;
int find(int x){
// Record the distance to the root node
if(p[x]!=x){
int t=find(p[x]);
d[x]+=d[p[x]];
p[x]=t;
}
return p[x];
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
p[i]=i; // All parent nodes are themselves
}
int res=0;
while(m--){
int t,x,y;
cin>>t>>x>>y;
if(x>n || y>n){
//x,y Greater than n The scope of the , This sentence is a lie
res++;
}else{
int px=find(x);//x The root node
int py=find(y);//y The root node
if(t==1){
//x and y It's the same kind
if(px==py && (d[x]-d[y])%3!=0){
// In the same tree , The distance difference between two points %3 Not for 0, It means it's not the same kind
res++;
}else if(px != py){
//x,y Not in the same tree
p[px]=py; //x The root node of is connected to y On the root node of
d[px]=d[y]-d[x];
}
}else{
//x eat y
if(px==py && (d[x]-d[y]-1)%3!=0){
//x,y In the same tree ,x Distance ratio y Freshman , namely (dx-dy-1)%3==0
res++;
}else if(px != py){
//x,y Not in the same tree ,
p[px]=py;//x The root node of is connected to y On the root node of
d[px]=d[y]+1-d[x];
}
}
}
}
cout<<res<<endl;
return 0;
}
Train of thought two
Union checking set ( Expanding domain )
This topic is mainly to open three expanded domains , That is, the natural enemy domain , Homogeneous domain , And predatory areas .
If x,y It's the same kind , however x Of Predatory domain
Yes y, that
If x,y It's the same kind , however x Of Natural enemy territory
Yes y, that
If x,y It's the same kind , however x Of Homogeneous domain
Yes y, that
If x yes y The natural enemies of , however x Of Homogeneous domain
There is y, that
If x yes y The natural enemies of , however x Of Natural enemy territory
There is y, that
If x yes y The world of , however x Of Predatory domain
There is y, that
Let's make the present X The predation domain of is X+N, At present X The natural enemy domain of is X+N+N
Code 2
// Let's make the present X The predation domain of is X+N, At present X The natural enemy domain of is X+N+N
#include<iostream>
using namespace std;
const int N=50000*3+5;
int p[N];
int n,m;
int find(int x){
if(x!=p[x]){
p[x]=find(p[x]);
}
return p[x];
}
int main(){
cin>>n>>m;
for(int i=1;i<=3*n;i++){
p[i]=i;
}
int res=0;
while (m -- ){
int k,x,y;
cin>>k>>x>>y;
if(x>n || y>n){
res++;
}else if(k==1){
//x and y similar
if(find(x)==find(y+n) || find(x)==find(y+n+n)){
//x stay y In the predatory domain ,x stay y In the field of natural enemies
res++;
}else{
p[find(x)]=p[find(y)]; //x and y similar
p[find(x+n)]=p[find(y+n)]; //x Predatory domain and y Predatory domain of the same
p[find(x+n+n)]=p[find(y+n+n)]; //x Natural enemy domain and y The natural enemy domain of
}
}else{
//x yes y The natural enemies of
if(x==y || find(x)==find(y) || find(x)==find(y+n)){
//x and y Is the same ,x and y It's the same kind ,x yes y The predator-prey area
res++;
}else{
p[find(x)]=p[find(y+n+n)]; //y Add... To your natural enemy domain x
p[find(x+n)]=p[find(y)]; //x In the predator-prey domain y
p[find(x+n+n)]=p[find(y+n)]; //x Natural enemy domain and y The predatory domain of is the same
}
}
}
cout<<res<<endl;
return 0;
}
边栏推荐
- [thingsboard] how to replace the homepage logo
- 假设检验——《概率论与数理统计》第八章学习笔记
- 函数(易错)
- Machine learning -- neural network
- Network layer - forwarding (IP, ARP, DCHP, ICMP, network layer addressing, network address translation)
- Group counting notes (1) - check code, original complement multiplication and division calculation, floating point calculation
- Minor spanning tree
- Private collection project practice sharing [Yugong series] February 2022 U3D full stack class 006 unity toolbar
- 防护电路中的元器件
- Sequence diagram of single sign on Certification Center
猜你喜欢
Special information | finance, accounting, audit - 22.1.23
Official announcement! The third cloud native programming challenge is officially launched!
User behavior collection platform
2022-2028 global and Chinese video coding and transcoding Market Research Report
How can CIOs use business analysis to build business value?
质量体系建设之路的分分合合
Burpsuite grabs app packets
3 minutes learn to create Google account and email detailed tutorial!
Setting up redis cluster cluster under Windows
MySQL in-depth learning - index creation and deletion, index design principles, index failure scenarios, query optimization, index push down ICP
随机推荐
Wan broadband access technology V EPON Technology
Web开发人员应该养成的10个编程习惯
The 22nd Spring Festival Gala, an immersive stage for the yuan universe to shine into reality
SPI read / write flash principle + complete code
Data security -- 14 -- Analysis of privacy protection governance
官宣!第三届云原生编程挑战赛正式启动!
[crampon game] MC tutorial - first day of survival
Leetcode 222 number of nodes of complete binary tree
电源管理总线 (PMBus)
Group counting notes (1) - check code, original complement multiplication and division calculation, floating point calculation
Label exchange experiment
取余操作是一个哈希函数
质量体系建设之路的分分合合
直播预告 | 容器服务 ACK 弹性预测最佳实践
windows下Redis-cluster集群搭建
Serpentine matrix
Setting up redis cluster cluster under Windows
【科普】热设计基础知识:5G光器件之散热分析
首席信息官如何利用业务分析构建业务价值?
Mxnet imports various libcudarts * so、 libcuda*. So not found