Java教程

#团,构造#洛谷 3524 [POI2011]IMP-Party

本文主要是介绍#团,构造#洛谷 3524 [POI2011]IMP-Party,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目

有一个 \(3n\) 个点的无向图,保证有一个大小为 \(2n\) 的团,输出一个大小为 \(n\) 的团


分析

每次选择两个不相连的点删掉,那么剩下的 \(n\) 个点一定是团,

因为每次至少有一个不在大小为 \(2n\) 的团中的点被删除,所以剩下的点一定在团中。

但是只是最多删除 \(n\) 次,所以输出完 \(n\) 个点后及时退出。


代码

#include <cstdio>
#include <cctype>
using namespace std;
const int N=3011; int n,ans;
bool kick[N],a[N][N];
int iut(){
	int ans=0; char c=getchar();
	while (!isdigit(c)) c=getchar();
	while (isdigit(c)) ans=ans*10+c-48,c=getchar();
	return ans; 
}
int main(){
	n=iut();
	for (int T=iut();T;--T){
		int x=iut(),y=iut();
		a[x][y]=a[y][x]=1;
	}
	for (int i=1;i<=n;++i)
	if (!kick[i]){
		for (int j=i+1;j<=n;++j)
		if (!kick[j]&&!a[i][j]){
			kick[i]=kick[j]=1;
			break;
		}
	}
	for (int i=1;i<=n;++i)
	if (!kick[i]){
		printf("%d ",i);
		if (++ans==n/3) break;
	}
	return 0;
}
这篇关于#团,构造#洛谷 3524 [POI2011]IMP-Party的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!