当前位置:网站首页>【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;
}
边栏推荐
- Mode in BST (binary tree & Notes on question brushing)
- 直播預告 | 容器服務 ACK 彈性預測最佳實踐
- History of web page requests
- Neural networks and deep learning Chapter 5: convolutional neural networks reading questions
- Aperçu en direct | Services de conteneurs ACK flexible Prediction Best Practices
- [popular science] basic knowledge of thermal design: heat dissipation analysis of 5g optical devices
- Private collection project practice sharing [Yugong series] February 2022 U3D full stack class 006 unity toolbar
- 取余操作是一个哈希函数
- Thematic information | carbon, carbon neutrality, low carbon, carbon emissions - 22.1.9
- Ffmepg usage guide
猜你喜欢

The remainder operation is a hash function

程序员应该怎么学数学

函数(易错)

TPG x AIDU | AI leading talent recruitment plan in progress!

2022-2028 global and Chinese virtual data storage Market Research Report

Advanced length of redis -- deletion strategy, master-slave replication, sentinel mode

Fonction (sujette aux erreurs)

质量体系建设之路的分分合合

Aperçu en direct | Services de conteneurs ACK flexible Prediction Best Practices

How should programmers learn mathematics
随机推荐
解密函数计算异步任务能力之「任务的状态及生命周期管理」
Components in protective circuit
Sequence diagram of single sign on Certification Center
Raki's notes on reading paper: code and named entity recognition in stackoverflow
CSDN正文自动生成目录
windows下Redis-cluster集群搭建
How to force activerecord to reload a class- How do I force ActiveRecord to reload a class?
Debug insights
SQL set operation
2022-2028 global and Chinese video coding and transcoding Market Research Report
Mode in BST (binary tree & Notes on question brushing)
Machine learning decision tree
Invalid bound statement (not found) in idea -- problem solving
[AI bulletin 20220211] the hard core up owner has built a lidar and detailed AI accelerator
Interface joint commissioning test script optimization V5.0 (end)
Function (error prone)
揭秘技术 Leader 必备的七大清奇脑回路
Wan broadband access technology V EPON Technology
10 programming habits that web developers should develop
Label exchange experiment