1. 程式人生 > 其它 >#團,構造#洛谷 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;
}