poj2524(并查集)
2017-05-23 19:27
225 查看
点击打开题目链接
大意:多组数据。每组数据中,n个学生,每个学生信最多一种教。给出m对学生信息,每对中两个学生信的教一样。
求这n个学生信教种数最多有多少。
思路:并查集,基础练手题
代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Reader {
static BufferedReader reader;
static StringTokenizer tokenizer;
static void init(InputStream input) {
reader = new BufferedReader(new InputStreamReader(input));
tokenizer = new StringTokenizer("");
}
static String next() throws IOException {
while (!tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(reader.readLine());
}
return tokenizer.nextToken();
}
static int nextInt() throws IOException {
return Integer.parseInt(next());
}
}
public class Main {
/**
* @param args
*/
static int ans, n, m, pa, pb, u, v, casenum;
static int p[], rank[];
private static int father(int u) {
if (u == p[u])
return u;
p[u] = father(p[u]);
return p[u];
}
private static void merge(int a, int b) {
pa = father(a);
pb = father(b);
if (pa != pb) {
if (rank[pa] < rank[pb])
p[pa] = pb;
else
p[pb] = pa;
if (rank[pa] == rank[pb])
rank[pa]++;
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Reader.init(System.in);
p = new int[50001];
rank = new int[50001];
n = Reader.nextInt();
m = Reader.nextInt();
casenum = 0;
while ((n != 0) || (m != 0)) {
casenum++;
for (int i = 1; i <= n; i++) {
p[i] = i;
rank[i] = 1;
}
for (int i = 1; i <= m; i++) {
u = Reader.nextInt();
v = Reader.nextInt();
merge(u, v);
}
ans = 0;
for (int i = 1; i <= n; i++)
if (p[i] == i)
ans++;
System.out.println("Case " + casenum + ": " + ans);
n = Reader.nextInt();
m = Reader.nextInt();
}
}
}
大意:多组数据。每组数据中,n个学生,每个学生信最多一种教。给出m对学生信息,每对中两个学生信的教一样。
求这n个学生信教种数最多有多少。
思路:并查集,基础练手题
代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Reader {
static BufferedReader reader;
static StringTokenizer tokenizer;
static void init(InputStream input) {
reader = new BufferedReader(new InputStreamReader(input));
tokenizer = new StringTokenizer("");
}
static String next() throws IOException {
while (!tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(reader.readLine());
}
return tokenizer.nextToken();
}
static int nextInt() throws IOException {
return Integer.parseInt(next());
}
}
public class Main {
/**
* @param args
*/
static int ans, n, m, pa, pb, u, v, casenum;
static int p[], rank[];
private static int father(int u) {
if (u == p[u])
return u;
p[u] = father(p[u]);
return p[u];
}
private static void merge(int a, int b) {
pa = father(a);
pb = father(b);
if (pa != pb) {
if (rank[pa] < rank[pb])
p[pa] = pb;
else
p[pb] = pa;
if (rank[pa] == rank[pb])
rank[pa]++;
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Reader.init(System.in);
p = new int[50001];
rank = new int[50001];
n = Reader.nextInt();
m = Reader.nextInt();
casenum = 0;
while ((n != 0) || (m != 0)) {
casenum++;
for (int i = 1; i <= n; i++) {
p[i] = i;
rank[i] = 1;
}
for (int i = 1; i <= m; i++) {
u = Reader.nextInt();
v = Reader.nextInt();
merge(u, v);
}
ans = 0;
for (int i = 1; i <= n; i++)
if (p[i] == i)
ans++;
System.out.println("Case " + casenum + ": " + ans);
n = Reader.nextInt();
m = Reader.nextInt();
}
}
}
相关文章推荐
- POJ2524-宗教问题-并查集-ACM
- 并查集-poj2524-Ubiquitous Religions
- POJ2524:Ubiquitous Religions (并查集模板)
- 并查集 POJ2524
- POJ2524 Ubiquitous Religions 并查集
- 并查集水题 POJ2524
- POJ2524(并查集)
- poj2524(并查集)
- POJ2524--Ubiquitous Religions(并查集)
- poj2524(简单并查集)
- POJ2524 并查集应用
- poj2524(并查集)买一送一hdu1213
- POJ2524(并查集)
- 并查集入门题集 POJ1611 POJ1703 POJ2524 POJ1182
- POJ2524(并查集)
- [c] poj2524 并查集
- POJ1611 && POJ2524 并查集入门
- POJ2524 Ubiquitous Religions (并查集)
- POJ1611 && POJ2524 并查集入门
- POJ2524 并查集