当前位置:网站首页>【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;
}
边栏推荐
- [uniapp] system hot update implementation ideas
- Debug insights
- windows下Redis-cluster集群搭建
- Function (error prone)
- 计组笔记(1)——校验码、原补码乘除计算、浮点数计算
- windows下Redis-cluster集群搭建
- After the deployment of web resources, the navigator cannot obtain the solution of mediadevices instance (navigator.mediadevices is undefined)
- Managed service network: application architecture evolution in the cloud native Era
- Neural networks and deep learning Chapter 5: convolutional neural networks reading questions
- Practice | mobile end practice
猜你喜欢
[phantom engine UE] the difference between running and starting, and the analysis of common problems
windows下Redis-cluster集群搭建
[Business Research Report] Research Report on male consumption trends in other economic times -- with download link
防护电路中的元器件
[finebi] the process of making custom maps using finebi
CSDN正文自动生成目录
Thematic information | carbon, carbon neutrality, low carbon, carbon emissions - 22.1.9
Introduce Hamming distance and calculation examples
Invalid bound statement (not found) in idea -- problem solving
Hypothesis testing -- learning notes of Chapter 8 of probability theory and mathematical statistics
随机推荐
How to get the first few pieces of data of each group gracefully
10 programming habits that web developers should develop
Machine learning decision tree
WeNet:面向工业落地的E2E语音识别工具
How should programmers learn mathematics
[crampon programming] lintcode decoding Encyclopedia - 872 termination process
level18
[groovy] closure (closure parameter binding | curry function | rcurry function | ncurry function | code example)
Raki's notes on reading paper: soft gazetteers for low resource named entity recognition
Power management bus (pmbus)
CUDA Programming atomic operation atomicadd reports error err:msb3721, return code 1
[thingsboard] how to replace the homepage logo
49 pictures and 26 questions explain in detail what is WiFi?
Ffmepg usage guide
Data security -- 14 -- Analysis of privacy protection governance
Introduction to RT thread kernel (4) -- clock management
windows下Redis-cluster集群搭建
Reading and visualization of DICOM, MHD and raw files in medical imaging
History of web page requests
Minor spanning tree