为了能到远方,脚下的每一步都不能少。|

larryyu_blog

园龄:2年5个月粉丝:5关注:17

2023-01-16 10:27阅读: 31评论: 3推荐: 0

P3524 [POI2011]IMP-Party 题解

题目传送门

更好的阅读体验

前置芝士

VG 子图,当 V 中任意两点都有边相连,则 VG 的一个团。


此图为本题样例

最大团: {1,3,4,5}

大小为 13n 的团: {1,3} {3,6} {1,5} {1,4} {3,5} {4,5} {3,4} {4,6} {4,2} {5,2}

一点点的图论

Description

给定一个大小为 n 的图,保证 n3 的倍数,且存在一个大小为 23n 的团,要求输出一个大小为 13n 的团(输出点编号即可)。

Solution

由题意得: 至少有 23n 个点两两相连,所以剩下的 13n 个点与这个大小为 23n 两两不一定相连。那就只要见一对点不相连,就删一对,见两对删两对。明显,最多只会删 13n 对点,也就是 23n 个点,剩下的点即为题目所求。

结合样例

{1,2} 无连边,删去。

{5,6} 无连边,删去。

{3,4} 即为题目所求 。

Code

int n,m,cnt;
bool is_con[10010][10010],vis[10010]; //是否连边或删除
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int a,b;
		cin>>a>>b;
		is_con[a][b]=is_con[b][a]=1; //连边
	}
	for(int i=1;i<=n;i++){
		if(vis[i]) continue;
		for(int j=1;j<=n;j++){
			if(j==i||vis[j]||is_con[i][j]) continue; //已经删了或不
			vis[i]=1;			               //满足删的条件
			vis[j]=1;
			break;
		}
	}
	for(int i=1;i<=n;i++){
		if(vis[i]) continue;
		cout<<i<<" ";
		cnt++;
		if(cnt==n/3) return 0; //大小已满足
	}
	cout<<endl;
	return 0;
}

完结撒花!!

本文作者:larryyu_blog

本文链接:https://www.cnblogs.com/larryyu/p/17054830.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   larryyu_blog  阅读(31)  评论(3编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起