第八届河南理工大学程序设计大赛 D. 疯狂精灵球(set的应用)

题目链接: https://hpuoj.com/contest/7/problem/D/

D. 疯狂精灵球

单点时限: 2.0 sec

内存限制: 512 MB

QAQ所在的学校今天正在再举办“疯狂精灵球”比赛,正在犹豫要不要参加时......

耳边突然响起了:

没有勇气开始的时候,其实已经结束了——HJL大佬的话,于是QAQ也鼓起勇气决定参赛,梦想还是要有的,万一当分母了呢..

…呸呸....万一获奖了呢

QAQ——现在拥有N个精灵球编号,每个精灵球里沉睡着一只战力为A的口袋怪兽。

战力相同的口袋怪兽属于同一种类,为了提升它们的实战经验QAQ安排了M场对局,每场对局由编号为X和Y的精灵球里的口袋怪兽进行对战,由于同一种类的口袋怪兽彼此之间共享实战经验,因此每和其他种类的口袋怪兽战斗一次,该种类所有的口袋怪兽的实战经验值都会加 1。

对于已经经历过对战的两种口袋怪兽由于它们已经互相熟悉对方的技能,再次对战便不会增加实战经验值,同一种类的口袋怪兽由于关系亲密即使被分配到一起也不会进行战斗。

输入格式

有T组测试数据。

对于每组数据第一行输入精灵球的个数 N 和 对局场数 M

第二行输入每个精灵球里沉睡的口袋怪兽的战力值A

接下来 M 行输入每场对局的精灵球编号 X和Y

0<T<40

2≤N≤100000,1≤M≤100000

1≤A≤100000

1≤X,Y≤N,X≠Y

输出格式

QAQ想从中挑出实战经验最丰富的的一个种类的口袋怪兽去参赛,对于实战经验一样的口袋怪兽,QAQ希望它能取得的好名次的可能性尽可能的大,每组输出占一行。

样例

input

3
3 2
1 2 3
1 2
1 3
3 2
2 3 5
1 2
3 1
2 2
3 4
1 2
1 2

output

1
2
4

思路:注意:“该种类所有的口袋怪兽的实战经验值都会加 1” 及 “已经经历过对战的两种口袋怪兽由于它们已经互相熟悉对方的技能,再次对战便不会增加实战经验值”;

用set对已经进行过的战斗进行去重。

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;

set <int> s[MAXN];
int power[MAXN];

int main()
{
	int T;
	cin>>T;
	for(int t=0; t<T; t++)
	{
		for(int i=1; i<MAXN; i++)
			s[i].clear();
		int n,m;
		cin>>n>>m;
		for(int i=1; i<=n; i++)
			cin>>power[i];
		int a,b;
		for(int i=0; i<m; i++)
		{
			cin>>a>>b;
			if(power[a] != power[b])
			{
				s[power[a]].insert(power[b]);
				s[power[b]].insert(power[a]);
			}
		}
		int ans = power[1];
		for(int i=2; i<=n; i++)
		{
			if(s[ans].size() < s[power[i]].size())
				ans = power[i];
			else if(s[ans].size() == s[power[i]].size() && ans < power[i])
				ans = power[i];
		}
		cout<<ans<<endl;
	}
	return 0;
}




//3
//3 2
//1 2 3
//1 2
//1 3
//3 2
//2 3 5
//1 2
//3 1
//2 2
//3 4
//1 2
//1 2

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值