关键词:
【问题描述】
某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一个庞大的犯罪集团,犯罪集团的危险程度唯一由集团内的犯罪团伙数量确定,而与单个犯罪团伙的危险程度无关(该犯罪集团的危险程度为n)。现在当地警方希望花尽量少的时间(即打击掉尽量少的团伙),使得庞大的犯罪集团分离成若干个较小的集团,并且他们中最大的一个的危险程度不超过n/2。为达到最好的效果,他们将按顺序打击掉编号1到k的犯罪团伙,请编程求出k的最小值。
【输入格式】black.in
第一行一个正整数n。接下来的n行每行有若干个正整数,第一个整数表示该行除第一个外还有多少个整数,若第i行存在正整数k,表示i,k两个团伙可以直接联系。
【输出格式】black.out
一个正整数,为k的最小值
【样例输入】
7
2 2 5
3 1 3 4
2 2 4
2 2 3
3 1 6 7
2 5 7
2 5 6
【样例输出】
1
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n, maxt, i, j, r1, r2, q, f, t;
int head[1001], s[1001], father[1001];
struct node
int data, nex;
p[100000];
int find(int x)
return father[x] == x ? x : father[x] = find(father[x]);
void lian(int x, int y)
p[++q].nex = head[x];
p[q].data = y;
head[x] = q;
int main()
cin >> n;
maxt = n / 2;
for (i = 1; i <= n; i++)
cin >> t;
for (j = 1; j <= t; j++)
cin >> f, lian(i, f);
for (i = 1; i <= n; i++)
father[i] = i;
s[i] = 1;
for (i = n; i >= 1; i--)
for (j = head[i]; j; j = p[j].nex)
if (p[j].data > i)
r1 = find(i);
r2 = find(p[j].data);
if (r1 != r2) //必须判断,否则"加重 ”
father[r2] = r1;
s[r1] = s[r1] + s[r2];
if (s[r1] > maxt)
cout << i;
return 0;
return 0;
动规(20)-并查集基础题——打击犯罪(代码片段)
【问题描述】 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形... 查看详情
动规(22)-并查集基础题——cd收藏cd.cpp(并查集)(代码片段)
Description 约翰平常爱听歌,所以买了很多的CD来收藏,但是因为平常整理不当,所以忘记了这些CD的歌手是谁。现在他想知道他到底收藏了多少位歌手的专辑,于是他想了一个办法,同时拿出两个CD来听... 查看详情
动规(22)-并查集基础题——cd收藏cd.cpp(并查集)(代码片段)
Description 约翰平常爱听歌,所以买了很多的CD来收藏,但是因为平常整理不当,所以忘记了这些CD的歌手是谁。现在他想知道他到底收藏了多少位歌手的专辑,于是他想了一个办法,同时拿出两个CD来听... 查看详情
动规(22)-并查集基础题——cd收藏cd.cpp(并查集)(代码片段)
Description 约翰平常爱听歌,所以买了很多的CD来收藏,但是因为平常整理不当,所以忘记了这些CD的歌手是谁。现在他想知道他到底收藏了多少位歌手的专辑,于是他想了一个办法,同时拿出两个CD来听... 查看详情
动规(16)-并查集基础题——格子游戏(代码片段)
【问题描述】Alice和Bob玩了一个古老的游戏:首先画一个n*n的点阵(下图n=3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边:直到围成一个封闭的圈(面积不必为1)为止,“封圈”的... 查看详情
动规(16)-并查集基础题——格子游戏(代码片段)
【问题描述】Alice和Bob玩了一个古老的游戏:首先画一个n*n的点阵(下图n=3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边:直到围成一个封闭的圈(面积不必为1)为止,“封圈”的... 查看详情
动规(16)-并查集基础题——格子游戏(代码片段)
【问题描述】Alice和Bob玩了一个古老的游戏:首先画一个n*n的点阵(下图n=3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边:直到围成一个封闭的圈(面积不必为1)为止,“封圈”的... 查看详情
动规(19)-并查集基础题——城镇道路(代码片段)
Description某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间... 查看详情
动规(19)-并查集基础题——城镇道路(代码片段)
Description某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间... 查看详情
动规(19)-并查集基础题——城镇道路(代码片段)
Description某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间... 查看详情
动规(23)-并查集基础题——家谱(代码片段)
【问题描述】 现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。【输入格式】gen.in 输入文件由多行组成,首先是一系列有关父子关系的描述,其中... 查看详情
动规(23)-并查集基础题——家谱(代码片段)
【问题描述】 现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。【输入格式】gen.in 输入文件由多行组成,首先是一系列有关父子关系的描述,其中... 查看详情
动规(24)-并查集基础题——关押罪犯(代码片段)
【问题描述】S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值ÿ... 查看详情
动规(24)-并查集基础题——关押罪犯(代码片段)
【问题描述】S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值ÿ... 查看详情
动规(24)-并查集基础题——关押罪犯(代码片段)
【问题描述】S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值ÿ... 查看详情
动规(21)-并查集基础题——搭配购买(代码片段)
Description Joe觉得云朵很美,决定去山上的商店买一些云朵。商店里有n朵云,云朵被编号为1,2,...,n,并且每朵云都有一个价值。但是商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这朵云有搭配... 查看详情
动规(21)-并查集基础题——搭配购买(代码片段)
Description Joe觉得云朵很美,决定去山上的商店买一些云朵。商店里有n朵云,云朵被编号为1,2,...,n,并且每朵云都有一个价值。但是商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这朵云有搭配... 查看详情
动规(21)-并查集基础题——搭配购买(代码片段)
Description Joe觉得云朵很美,决定去山上的商店买一些云朵。商店里有n朵云,云朵被编号为1,2,...,n,并且每朵云都有一个价值。但是商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这朵云有搭配... 查看详情