【题解】打击犯罪

题目描述

某个地区有n(n≤1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1至n,他们有些团伙之间有直接联系,,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一个庞大的犯罪集团,犯罪集团的危险程度由集团内的犯罪团伙数量唯一确定,而与单个犯罪团伙的危险程度无关(该犯罪集团的危险程度为n)。现在当地 警方希望花尽量少的时间(即打击掉尽量少的团伙),使得庞大的犯罪集团分离成若干个较小的集团,并且他们中最大的一个的危险程度不超过 n/2。为达到最好的效果,他们将按顺序打击掉编号1到k的犯罪团伙,请编程求出k的最小值。

输入格式

第一行,一个正整数 n。

接下来的n行,每行有若干个正整数,第一个整数表示该行除第一个外还有多少个整数,若第i行存在正整数k,表示i,k两个团伙可以直接联系。

输出格式

一个正整数,为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

样例说明

输出1(打击犯罪团伙)

题解

我们可以倒序枚举,从$n$枚举到$1$。

当我们枚举到$i$的时候,我们就合并满足$i < j$的边$(i, j)$,合并后判断当前$i$所在集合的点数是否大于$\frac{n}{2}$即可。

#include <iostream>
#include <cstdio>

#define MAX_N (1000 + 5)

using namespace std;

int n;
int a[MAX_N][MAX_N], l[MAX_N];
int r[MAX_N], c[MAX_N];

int Root(int x)
{
    int R = x, tmp;
    while(R != r[R]) R = r[R];
    while(x != r[x]) tmp = r[x], r[x] = R, x = tmp;
    return R;
}

void Merge(int x, int y)
{
    x = Root(x);
    y = Root(y);
    r[x] = y;
    c[y] += c[x];
    c[x] = 0;
    return;
}

int main()
{
    scanf("%d", &n);
    for(register int i = 1; i <= n; ++i)
    {
        scanf("%d", l + i);
        for(register int j = 1; j <= l[i]; ++j)
        {
            scanf("%d", a[i] + j);
        }
    }
    for(register int i = 1; i <= n; ++i)
    {
        r[i] = i;
        c[i] = 1;
    }
    for(register int i = n; i; --i)
    {
        for(register int j = 1; j <= l[i]; ++j)
        {
            if(i > a[i][j]) continue;
            if(Root(i) != Root(a[i][j])) Merge(i, a[i][j]);
            if(c[Root(i)] > (n >> 1)) return printf("%d", i), 0;
        }
    }
    return 0;
}

参考程序

原文地址:https://www.cnblogs.com/kcn999/p/10990524.html

时间: 2024-10-01 21:29:17

【题解】打击犯罪的相关文章

codevs 5971 打击犯罪

题目描述 Description 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一个庞大的犯罪集团,犯罪集团的危险程度唯一由集团内的犯罪团伙数量确定,而与单个犯罪团伙的危险程度无关(该犯罪集团的危险程度为n).现在当地警方希望花尽量少的时间(即打击掉尽量少的团伙),使得庞大的犯罪集团分离成若干个较小的集团,并且他们中最大的一个的危险程度不超过n/2.为达到

一本通 P1386 【打击犯罪】

题库 :一本通 题号 :1386 题目 :打击犯罪 link :http://ybt.ssoier.cn:8088/problem_show.php?pid=1386 O(n3)思路 :此题数据太水,n3就能卡过.暴力枚举1 ~ n,每次都重新将并查集初始化并且按题目输入将所有 >= k(1 <= k <= n)的点合并(及打击掉1 ~ k的犯罪团伙,他们不合并).从1 ~ n枚举直到找到最小的k满足所有犯罪团伙中的最大的一个的危险程度不超过n / 2,直接输出k. code : 1 #

codevs 5971 打击犯罪 x

题目描述 Description 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一个庞大的犯罪集团,犯罪集团的危险程度唯一由集团内的犯罪团伙数量确定,而与单个犯罪团伙的危险程度无关(该犯罪集团的危险程度为n).现在当地警方希望花尽量少的时间(即打击掉尽量少的团伙),使得庞大的犯罪集团分离成若干个较小的集团,并且他们中最大的一个的危险程度不超过n/2.为达到

打击犯罪(black)

题目描述 题目描述 Description 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一个庞大的犯罪集团,犯罪集团的危险程度唯一由集团内的犯罪团伙数量确定,而与单个犯罪团伙的危险程度无关(该犯罪集团的危险程度为n).现在当地警方希望花尽量少的时间(即打击掉尽量少的团伙),使得庞大的犯罪集团分离成若干个较小的集团,并且他们中最大的一个的危险程度不超过n/

&lt;wzoi449&gt;打击犯罪

#include <bits/stdc++.h> #define maxn 1005 #define ms(s) memset(s,0,sizeof(s)) #define in(x) scanf("%d",&x) using namespace std; int n,f[maxn],g[maxn][maxn]; int cnt[maxn]; int find(int a){ if(f[a]==a){ return a; } else { f[a]=find(f[a

什么?php也能做爬虫?

php爬虫代码(爬去我的OJ题库为例) <?php for ($i=1000;;$i++){ $url = "http://localhost/JudgeOnline/problem.php?pid=$i"; //这儿填OJ地址 $info=file_get_contents($url); preg_match('|<title>(.*?)<\/title>|i',$info,$m); //获取标题 $title[$i][1]=$m[1]; if (!$m

chinacloud大数据新闻

2015年大数据发展八大趋势   (0 篇回复) “数据很丰满,信息很骨感”:Sight Machine想用大数据的方法,打碎两者间的屏障   (0 篇回复) 百度携大数据"圈地"证券业 "BAT"开启互联网金融新战场   (0 篇回复) 码农的春天到了?   (0 篇回复) 浪潮大数据一体机出招 装备科研“最强大脑”   (0 篇回复) 方物软件承担国家“核高基”重大专项研发   (2 篇回复) 2013互联网大会透露的热点与新趋势   (1 篇回复) 大数据从幕

网络黑色产业调查:职业黑客推动洗钱贩卖身份

网络黑色产业调查:职业黑客推动洗钱贩卖身份 原标题:网络黑色产业调查 1 导读 网络犯罪呈现产业链化,分工日趋明细.专业化黑色利益链条的出现,让交易.勾连的双方,可能无须相互认识或见面.社交软件成为网络犯罪的重要工具和阵地,在某些情况下,甚至影响社会稳定.威胁国家安全. 本报记者 王峰 北京报道 “简直是腹背受制”,黄安(化名)谈到2015年8月向公安机关报案的感受时说. 黄安是某航空公司机票销售部门的负责人.2015年7月31日开始,这家航空公司的网上销售机票B2B系统就开始遭受黑客攻击,攻击

提升大数据数据分析性能的方法及技术(一)

关于此文 最近在忙着准备校招的相关复习,所以也整理了一下上学期上课时候的学到的一些知识.刚好发现当时还写了一篇类似于文献综述性质的文章,就在这里贴出来.题材是关于大数据的,也是比较火热的一个话题,虽然现在接触的项目与大数据不太有关联,可能以后也不一定从事这方面的工作吧.就IT行业的研究成果来讲国外期刊无论是发表速度还是质量都是高于国内,所以参考的大部分都是当时最新在核心期刊上发表的论文,参考文献在最后一一列出.因为文章没有多少自己的创新点,仅仅是最新.最热技术或者分析的一个总结,所以放上来仅仅是