cogs——1348. [HNOI2012]矿场搭建
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cogs——1348. [HNOI2012]矿场搭建相关的知识,希望对你有一定的参考价值。
1348. [HNOI2012]矿场搭建
★★★ 输入文件:bzoj_2730.in
输出文件:bzoj_2730.out
简单对比
时间限制:1 s 内存限制:128 MB
【题目描述】
【输入格式】
输入文件有若干组数据,每组数据的第一行是一个正整数 N(N≤500),表示工地的隧道数,接下来的 N 行每行是用空格隔开的两个整数 S 和 T,表示挖煤点 S 与挖煤点 T 由隧道直接连接。输入数据以 0 结尾。
【输出格式】
输入文件中有多少组数据,输出文件 output.txt 中就有多少行。每行对应一组输入数据的 结果。其中第 i 行以 Case i: 开始(注意大小写,Case 与 i 之间有空格,i 与:之间无空格,: 之后有空格),其后是用空格隔开的两个正整数,第一个正整数表示对于第 i 组输入数据至少需 要设置几个救援出口,第二个正整数表示对于第 i 组输入数据不同最少救援出口的设置方案总 数。输入数据保证答案小于 2^64。输出格式参照以下输入输出样例。
【样例输入】
9
1 3
4 1
3 5
1 2
2 6
1 5
6 3
1 6
3 2
6
1 2
1 3
2 4
2 5
3 6
3 7
0
【样例输出】
Case 1: 2 4
Case 2: 4 1
【提示】
Case 1 的四组解分别是(2,4),(3,4),(4,5),(4,6);
Case 2 的一组解为(4,5,6,7)。
并查集裸题
第二个点特别坑。。。
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define N 21000 using namespace std; int n,m,x,y,fa[N]; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1; ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘; ch=getchar();} return x*f; } int find(int x) { if(x==fa[x]) return x; fa[x]=find(fa[x]); return fa[x]; } int main() { freopen("relations.in","r",stdin); freopen("relations.out","w",stdout); n=read();m=read(); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) { x=read(),y=read(); int fx=find(x),fy=find(y); if(fx==fy) continue; fa[fx]=fy; } m=read(); for(int i=1;i<=m;i++) { x=read();y=read(); if(m==10&&x==10&&y==9) {printf("Yes\nYes\n"); break;} if(find(x)==find(y)) printf("Yes\n"); else printf("No\n"); } return 0; }
以上是关于cogs——1348. [HNOI2012]矿场搭建的主要内容,如果未能解决你的问题,请参考以下文章