POJ 2492 A bug's life【擴充套件域 | 邊帶權並查集】
Background
Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of the opposite gender. In his experiment, individual bugs and their interactions were easy to identify, because numbers were printed on their backs.
Problem
Given a list of bug interactions, decide whether the experiment supports his assumption of two genders with no homosexual bugs or if it contains some bug interactions that falsify it.
Input
The first line of the input contains the number of scenarios. Each scenario starts with one line giving the number of bugs (at least one, and up to 2000) and the number of interactions (up to 1000000) separated by a single space. In the following lines, each interaction is given in the form of two distinct bug numbers separated by a single space. Bugs are numbered consecutively starting from one.
Output
The output for every scenario is a line containing "Scenario #i:", where i is the number of the scenario starting at 1, followed by one line saying either "No suspicious bugs found!" if the experiment is consistent with his assumption about the bugs' sexual behavior, or "Suspicious bugs found!" if Professor Hopper's assumption is definitely wrong.
Sample Input
2 3 3 1 2 2 3 1 3 4 2 1 2 3 4
Sample Output
Scenario #1: Suspicious bugs found! Scenario #2: No suspicious bugs found!
Hint
Huge input,scanf is recommended.
題解:擴充套件域解法:用 n+x 表示與 x 性別相反的蟲子。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 2000+7;
int fa[maxn<<1];
int get(int x) {
if(x == fa[x]) return x;
return fa[x] = get(fa[x]);
}
void Merge(int x, int y) {
fa[get(x)] = get(y);
}
int main()
{
int t, n, m;
int cnt = 0;
scanf("%d", &t);
for(int i = 1; i <= t; i++) {
int flag = 1;
scanf("%d %d", &n, &m);
for(int i = 1; i <= 2*n; i++)
fa[i] = i;
int a, b;
while(m--) {
scanf("%d %d", &a, &b);
if(get(a) != get(b)){//a, b 不是同性
Merge(a+n, b);//合併同一性別的蟲子
Merge(a, b+n);
}
else flag = 0;//a, b是同性
}
printf("Scenario #%d:\n", i);
if(!flag) printf("Suspicious bugs found!\n");
else printf("No suspicious bugs found!\n");
if(i != t) printf("\n");
}
return 0;
}
相關文章
- POJ 1182 食物鏈【擴充套件域 | 邊帶權並查集】套件並查集
- POJ 1733 Parity【擴充套件域並查集】套件並查集
- 關押罪犯 擴充套件域並查集 帶權並查集 二分圖+二分套件並查集
- 並查集擴充套件並查集套件
- 並查集擴充套件應用並查集套件
- 並查集到帶權並查集並查集
- CHOJ 4101 銀河英雄傳說【邊帶權並查集】並查集
- 樹(tree) - 題解(帶權並查集)並查集
- 【資料結構】帶權並查集資料結構並查集
- 【帶權並查集】理論和應用並查集
- 擴充套件叢集blk數套件
- POJ2253 Frogger【並查集+貪心】並查集
- bzoj4690: Never Wait for Weights(帶權並查集)AI並查集
- 乾貨丨如何水平擴充套件和垂直擴充套件DolphinDB叢集?套件
- 【並查集】【帶偏移的並查集】食物鏈並查集
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- POJ1797 Heavy Transportation【並查集+貪心】並查集
- POJ-1182-食物鏈(並查集種類)並查集
- Django內建許可權擴充套件案例Django套件
- 擴充套件.Django-許可權系統套件Django
- etcd管理,證書配置,擴充套件,遷移恢復,帶證書擴充套件節點套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- 開源 | FLUI : Flutter 的元件擴充套件集UIFlutter元件套件
- SuperEdge: 使用WebAssembly擴充套件邊緣計算場景Web套件
- 檢查PHP擴充套件是否安裝成功PHP套件
- 擴充套件工具套件
- Sanic 擴充套件套件
- Mybatis擴充套件MyBatis套件
- SpringMVC 擴充套件SpringMVC套件
- ORACLE 擴充套件Oracle套件
- ncurses其他特性:curs_set(),離開curses模式,ACS_擴充套件字符集,擴充套件庫模式套件
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- SAP S/4HANA extensibility擴充套件原理介紹套件
- JavaScript權威指南(11)——JavaScript的子集和擴充套件JavaScript套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP
- iOS 通知擴充套件iOS套件