首页 > 其他分享 >打击犯罪(题解)

打击犯罪(题解)

时间:2024-02-29 12:11:28浏览次数:23  
标签:group int 题解 fa maxn 打击犯罪 getfa 节点

题目

题目描述

样例输入

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

关于本题

  • 这个题反着想会很简单,也就是复活犯罪,但是这个反着的思路不好想到(比如我就没想到)。
  • 看其他blog基本上都是反着来的,确实复杂度小不少,但是别人写过的我就不写了,我就给出正着来的解法。
  • 思路很简单,就是不断的删去一个父亲节点,这样就相当于打击了这个节点,当然每次去除都需要重新建立节点之间的关系(记得初始化),下面给出代码。
#include<bits/stdc++.h>
using namespace std;

const int maxn=1010;

int n,m,ans;
int fa[maxn],group[maxn][maxn],risk[maxn];
//group[i][j]记录以i为父亲节点的团伙j,为了每次重新建立关系

int getfa(int x)
{
	if(x==fa[x])return fa[x];
	return fa[x]=getfa(fa[x]);
}

void merge(int x,int y)
{
	if(getfa(x)!=getfa(y))fa[getfa(y)]=getfa(x);
}

int main()
{
	std::ios::sync_with_stdio(false);
	cin >>n;
	for(int j=1;j<=n;j++)
	{
		cin>>m;
		group[j][0]=m;
		for(int i=1;i<=m;i++)
		{
			cin >>group[j][i];
		}
	}
    //每次删去i节点
	for(int i=1;i<n;i++)
	{
		memset(risk,0,sizeof(risk));
		for(int j=1;j<=n;j++)
		{
			fa[j]=j;
		}
		ans=0;
		for(int j=i+1;j<=n;j++)
		{
			for(int k=1;k<=group[j][0];k++)
			{
				if(group[j][k]>j)merge(j,group[j][k]);
			}
		}
        //如果两个节点的根节点相同,那么着两个节点属于一个团伙,所以求危险程度只需要便利根节点
		for(int j=i+1;j<=n;j++)
		{
			risk[getfa(j)]++;
		}
		for(int j=i+1;j<=n;j++)
		{
			ans=max(ans,risk[j]);
		}
		if(ans<=n/2)
		{
			cout <<i;
			return 0;
		}
	}
	
	return 0;
}

标签:group,int,题解,fa,maxn,打击犯罪,getfa,节点
From: https://www.cnblogs.com/wang-qa/p/18043217

相关文章

  • [ABC282Ex] Min + Sum 题解
    [ABC282Ex]Min+Sum题解题面传送门。题目要求有多少对\((l,r)\)满足\(1\lel\ler\len\)且\(\sum_{i=l}^{r}{b_i}+\min_{i=l}^{r}{a_i}\leS\)。考虑CDQ分治,那么我们需要不断寻找有多少对\((l,r)\)满足\(L\lel\leM<r\leR\)且\(\sum_{i=l}^{r}{b......
  • P9836 种树 题解
    题目传送门前置知识质因数分解。贪心。题解思路先来解决一个问题,统计一个数\(x\)的正因数个数。可以将\(x\)质因数分解,得到每个数在\(x\)的质因数分解中出现了多少次。都知道质因数分解是每个数的唯一分解,那么统计个数的时候就只需要枚举每个质因数的出现个数。所以......
  • CF510C Fox And Names 题解
    CF510CFoxAndNames题解https://www.luogu.com.cn/problem/CF510C思路题意就是:确定一个小写字母的比较规则,使得给定的所有字符串在一开始就是按你确定的比较规则排序了的。可以发现:对于前后一对字符串,找到第一对不同的字符,是要这两个字符有合法的大小关系,就能满足题意。......
  • CF383C Propagating tree 题解
    题目链接:CF或者洛谷比较朴素的题,注意到这个涉及到子树变化,我们考虑优先处理出\(dfs\)序,方便处理。注意到第一个问题较为繁琐,我们着重解决下第一个问题。在树上问题,我们这种间隔点常常使用\(deep\)进行区分。根的\(deep\)为奇数,那么对自己子树范围内的奇数\(deep\)......
  • P2487 [SDOI2011] 拦截导弹 题解
    题目链接:拦截导弹约定:本题中提到的\(LDS\)和\(LIS\)不是严格单调,而是非严格单调,即为\(\le或者\ge\)。比较神奇的题,问的东西比较多,我们逐渐拆分:对于第一个问题而言,这个dp方程是很好写的:\[dp[i]=\max{dp[j]}+1(i<j,h[i]\leh[j],v[i]\lev[j])\]其中\(dp[i]\)即......
  • 题解 gym102900J 【Octasection】
    代码:#include<iostream>#include<algorithm>#include<stack>#include<vector>#include<cstdio>usingnamespacestd;typedefstructRectangle_tag{ intx1; intx2; inty1; inty2; Rectangle_tag(intx1_,intx2_,int......
  • 24冬网络流复习题解
    A是谁瞪了半个小时不会*2000呀,是谁呀是谁呀。感觉这题比部分紫题都难。。。首先发现选取字符的顺序并不重要,所以\(t\)可以看成\(26\)个字符要选的个数。设字符\(c\)出现了\(x\)次,那么直接向汇点连流量为\(x\)费用为\(0\)的边。然后考虑\(s_i\)与每个字符的关......
  • 2024年2月28号题解
    P4994终于结束的起点解题思路通过加法同余原理可以知道f[i]%m==0,那么f[i-1]%m=1,所有把f[i+1]%m=1转换成了f[i-1]%m=1的问题那么只需要填好斐波那契数列再判断就可以了,又因为斐波那契可能会超出int的范围那么我们对每一项斐波那契再取模就可以了代码......
  • 旅游景点 Tourist Attractions (壮压 DP)题解
    简化题意题目链接——不卡内存班题目链接——卡内存版给定\(n\)个点和\(m\)条边组成的无向图,按照一定限制要求停留\(2\simk+1\)共\(k\)个点(可以经过但不停留),求最短的从\(1\)出发到\(n\)的路径长。限制情况如下:共有\(q\)个限制,接下来\(q\)行,每行两个数\(x......
  • CF1408H Rainbow Triples 题解
    Description给定长度为\(n\)的序列\(p\)找出尽可能多的三元组\((a_i,b_i,c_i)\)满足:\(1\lea_i<b_i<c_i\len\)\(p_{a_i}=p_{c_i}=0\),\(p_{b_i}\ne0\)\(p_{b_i}\)互不相同。所有的\(a_i,b_i,c_i\)互不相同。输出最多可以选出多少个三元组,多组数据。\(\sumn\le......