国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【并查集】食物鏈

2019-11-06 06:25:40
字體:
來源:轉載
供稿:網友

題目傳送門:http://codevs.cn/PRoblem/1074/

現在才發現我這么蒟蒻,并查集都不怎么會用啊!!!

這道題似乎用了一個很巧妙(估計是我太弱)的東西,就是用 i , i+n , i+n*2 來表示 i 在 A B C 三個種類,似乎是可以輪換的

然后每讀入一次先驗證是否是假話,不是的話就合并(好像是廢話)

具體見代碼吧

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;#define LL long longint fa[150005],n,m,x,y,z,ans;int find(int x){ if (fa[x]==x) return x; fa[x]=find(fa[x]); return fa[x];}void unite(int x,int y){ x=find(x); y=find(y); if (x==y) return; fa[x]=y;}int main(){ cin>>n>>m; for (int i=1;i<=n*3;i++) fa[i]=i; for (int i=1;i<=m;i++){ cin>>z>>x>>y; if (x<0 || x>n || y<0 ||y>n){ ans++; continue; } if (z==1){ if (find(x)==find(y+n) || find(x)==find(y+n*2)){//x與y一樣時顯然不能互相吃來吃去 ans++; continue; } else{ unite(x,y); unite(x+n,y+n); unite(x+n*2,y+n*2); } } if (z==2){ if (find(x)==find(y) || find(x)==find(y+n*2)){//x吃y時x顯然不與y一樣,也不能是y吃x ans++; continue; } else{ unite(x,y+n); unite(x+n,y+n*2); unite(x+n*2,y); } } } cout<<ans;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临沭县| 彩票| 开封县| 兴安盟| 龙江县| 辉县市| 卓资县| 阿鲁科尔沁旗| 繁昌县| 肥城市| 伊金霍洛旗| 广东省| 宣城市| 澎湖县| 高陵县| 集贤县| 大安市| 大城县| 龙岩市| 亳州市| 崇义县| 衡水市| 江城| 老河口市| 平遥县| 敦化市| 岢岚县| 腾冲县| 通河县| 广州市| 本溪| 常熟市| 涟源市| 辽源市| 阳江市| 双柏县| 汝州市| 定襄县| 镇宁| 珠海市| 瑞丽市|