UVa10505 - Montesco vs Capuleto(染色问题)

文章探讨了如何在敌对家族背景下为婚礼派对选择最佳受邀人员,通过解决复杂的社交关系问题,确保所有受邀者都能愉快接受邀请。文中详细介绍了输入数据格式、解决方案和实例分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem F
Montesco vs Capuleto

 

Background

Romeo and Juliet have finally decided to get married. Butpreparing the wedding party will not be so easy, as it iswell-known that their respective families --the Montesco and theCapuleto-- are bloody enemies. In this problem you will have todecide which person to invite and which person not to invite, inorder to prevent a slaugther.

The Problem

We have a list of N people who can be invited to theparty or not. For every person i, we have a list of hisenemies: E1, E2, ..., Ep. The"enemy" relationship has the following properties:

- Anti-transitive. If a is an enemyof b, and b is an enemy of c, then ais a friend of c. Also, the enemies of the friends of aare his enemies, and the friends of the friends of a arehis friends.

- Symmetrical. If a is an enemy of b,then b is an enemy of a (although it may not beindicated in his list of enemies).

One person will accept an invitation to the party if, and onlyif, he is invited, all his friends are invited and none of hisenemies is invited. You have to find the maximum number of peoplethat can be invited, so that all of them accept their invitation.

For instance, if N=5, and we know that: 1 is enemy of3, 2 is enemy of 1, and 4 is enemy of 5, then we could invite amaximum of 3 people. These people could be 2, 3 and 4, but forthis problem we only want the number of people invited.

Input 

The first line of the input file contains the number Mof test cases in this file. A blank line follows this number, anda blank line is also used to separate test cases. The first lineof each test case contains an integer N, indicating thenumber of people who have to be considered. You can assume that N<=200.For each of these N people, there is a line with hislist of enemies. The first line contains the list of enemies ofperson 1, the second line contains the list of enemies of person2, and so on. Each list of enemies starts with an integer p(the number of known enemies of that person) and then, there are pintegers (the p enemies of that person). So, forexample, if a person's enemies are 5 and 7, his list of enemieswould be: "2 5 7".

Output

For each test case, the output should consist of a single linecontaining an integer, the maximum number of people who can beinvited, so that all of them accept their invitation.

SampleInput 

3

5
1 3
1 1
0
1 5
0

8
2 4 5
2 1 3
0
0
0
1 3
0
1 5

3
2 2 3
1 3
1 1

SampleOutput 

3
5
0
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 210;

int g[N][N];
int n;
int vis[N];

void input()
{
	scanf("%d", &n);
	memset(g, 0x00, sizeof(g));
	for (int u = 0; u < n; u++) {
		int num, v;
		scanf("%d", &num);
		for (int i = 0; i < num; i++) {
			scanf("%d", &v);
			v--;
			g[u][v] = g[v][u] = 1;
		}
	}
}

void dfs(int u, int &a, int &b, int &ok, int val)
{
	if (vis[u]) {
		ok &= (vis[u] == val);
		return;
	} else {
		vis[u] = val;
		a++;
		for (int v = 0; v < n; v++) {
			if (g[u][v]) dfs(v, b, a, ok, 3 - val);
		}
	}
}

void solve()
{
	memset(vis, 0, sizeof(vis));
	int ans = 0;
	
	for (int i = 0; i < n; i++) {
		if (!vis[i]) {
			int a = 0, b= 0, ok = 1;
			dfs(i, a, b, ok, 1);
			ans += ok * max(a, b);
		}
	}
	
	printf("%d\n", ans);
}

int main()
{
	#ifndef ONLINE_JUDGE
		freopen("d:\\OJ\\uva_in.txt", "r", stdin);
	#endif
	
	int t;
	scanf("%d", &t);
	while (t--) {
		input();
		solve();
	}
	return 0;
}



内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译与训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,并提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,并结合其他分析工具共同决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值