小x玩游戏

题目大意

今天,小 x 因为太无聊,就在玩游戏。

这个游戏有两个队伍,然后他们在游戏里面打来打去。

但小 x 遇到了难题。他不知道自己的队友是谁。他只知道总共有两个队伍,每队有 n n n 个人和很多组击杀情况。

他想问你,现在他能否知道两个队伍分别有谁。

你可以帮助小 x 吗?

对于 100 % 100\% 100% 的数据, t < = 10 , n < = 2000 , m < = 100000 t<=10,n<=2000,m<=100000 t<=10n<=2000m<=100000

数据保证不会有矛盾的关系。

解题思路

并查集水题。

对名字进行哈希,或者用 map

x + 2 ∗ n x+2*n x+2n x x x 的敌人,

x x x y y y 是敌人,即表示为 f a [ f i n d ( a + 2 ∗ n ) ] = f i n d ( b ) , f a [ f i n d ( b + 2 ∗ n ) ] = f i n d ( a ) fa[find(a + 2 * n)] = find(b),fa[find(b + 2 * n)] = find(a) fa[find(a+2n)]=find(b),fa[find(b+2n)]=find(a),因为敌人的敌人是朋友嘛。

最后判断是否有矛盾即可。

如果并查集有两个根,判大小是否等于 n n n即可。

否则,从跟里找出两个的大小和等于 n n n,若有即为满足,否则不满足。

考场判断写错,惨丢 30 p t s 30pts 30pts,啊!

AC CODE

#include <bits/stdc++.h>
using namespace std;
 
#define int long long
 
const int _ = 200007;
 
const int base = 233;
 
const int mod = 1e9 + 7;
 
int T, n, m;
 
int fa[_];
 
int k, f[_];
 
map<long long, int> q;
 
int sm[_];
 
int jj, qq[_];
 
void init()
{
    jj = 0;
    for(int i = 1; i <= k; ++i) q[f[i]] = 0;
    k = 0;
    memset(sm, 0, sizeof sm);
    for(int i = 1; i < _; ++i) fa[i] = i;
}
 
int find(int x)
{
    return fa[x] == x ? x : fa[x] = find(fa[x]);
}
 
char str[15];
 
int read()
{
    int x = 0;
    char c = getchar();
    while(c < '0' || c > '9') c= getchar();
    while(c >= '0' && c <= '9')
    {
        x = x * 10 + c - '0';
        c = getchar();
    }
    return x;
}
 
void write(int x)
{
    if(x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}
 
int cc, dd;
 
array<int, _> c, d;
 
signed main()
{
    T = read();
    while(T--)
    {
        int ans = 0;
        n = read();
        m = read();
        init();
        for(int i = 1; i <= m; ++i)
        {
            scanf("%s", str);
            int a, b;
            int x = 0;
            for(int j = 0, len = strlen(str); j < len; ++j)
                x = (x * base % mod + (int)(str[j] - 'a' + 1)) % mod;
            if(!q[x])
            {
                q[x] = ++k;
                f[k] = x;
            }
            a = q[x];
            scanf("%s", str);
            x = 0;
            for(int j = 0, len = strlen(str); j < len; ++j)
                x = (x * base % mod + (int)(str[j] - 'a' + 1)) % mod;
            if(!q[x])
            {
                q[x] = ++k;
                f[k] = x;
            }
            b = q[x];
            fa[find(a + 2 * n)] = find(b);
            fa[find(b + 2 * n)] = find(a);
        }
        if(2 * n > k)
        {
            puts("NO");
            continue;
        }
        for(int i = 1; i <= k; ++i)
        {
            if(fa[i] == i) qq[++jj] = i;
            sm[find(i)]++;
        }
//      cout << jj << endl;
        if(jj != 2)
        {
            int res = 0;
            bool flag = 0;
            for(int i = 1; i <= jj; ++i) res += sm[qq[i]];
            if(res & 1)
            {
                puts("NO");
                continue;
            }
            for(int i = 1; i < 2 * n && !flag; ++i)
            	for(int j = i + 1; j <= 2 * n && !flag; ++j)
                	if(sm[i] + sm[j] == n)
                	{
                		puts("YES");
                		flag = 1;
					}
            if(!flag)
                puts("NO");
        }
        else
        {
            if(sm[qq[1]] != n) puts("NO");
            else puts("YES");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cocos2d-x是一款流行的开源游戏引擎,它可以用作开发本地移动游戏和桌面游戏。利用cocos2d-x游戏源码,开发人员可以快速构建流畅、高效、具有吸引力的游戏。该引擎使用C ++语言和脚本语言Lua来实现游戏开发,用户可以根据自己的需要进行选择。 cocos2d-x游戏源码包含许多强大的功能和工具,例如精灵、动画、场景管理、碰撞检测和音频控制等。通过这些功能,开发人员可以方便地创建各种类型的游戏,例如动作游戏、射击游戏、冒险游戏和益智游戏等。 此外,cocos2d-x游戏源码还具有高度定制化的特性,允许开发人员根据他们的需求自定义游戏元素。这种定制化可以通过改进游戏画面,添加新的模式和关卡,甚至整个新的游戏玩法来完成。 总之,cocos2d-x游戏源码是一款功能强大、易于使用和高度定制的游戏引擎,它可以帮助开发人员快速开发各种类型的游戏。无论你是专业开发人员还是无经验的游戏制作者,cocos2d-x都是一个极好的选择。 ### 回答2: Cocos2d-x游戏源码是使用Cocos2d-x引擎进行开发的游戏程序代码。Cocos2d-x引擎是一个开源的跨平台游戏引擎,可以支持iOS、Android、Windows Phone、Windows、MacOS和Linux等多个平台,并且提供了丰富的游戏开发API和工具集。Cocos2d-x游戏源码包含了游戏的核心逻辑、UI设计、动画效果、音频效果等各方面的代码,可以作为开发者学习和借鉴的重要资料。 由于Cocos2d-x引擎支持多种编程语言(如C++、Lua等),因此Cocos2d-x游戏源码也会有对应的编程语言版本。开发者可以通过阅读Cocos2d-x游戏源码,了解游戏开发过程中的技术细节,学习如何使用Cocos2d-x引擎进行游戏开发。同时,开发者也可以通过对Cocos2d-x游戏源码进行修改和优化,来满足游戏的特定需求,提升游戏的性能和用户体验。 总之,Cocos2d-x游戏源码是游戏开发者必备的重要资源,可以帮助开发者更好地了解游戏开发技术,提升游戏开发水平。 ### 回答3: cocos2d-x是一款优秀的游戏开发引擎,其源码包含了许多功能强大的游戏开发工具和API。使用cocos2d-x可以帮助开发者更快速更高效地开发出优秀的游戏作品。 cocos2d-x的游戏源码非常丰富,其包含了许多不同类型的游戏示例和模板,如平面射击、塔防、解谜等,这些示例可以帮助开发者更好地了解cocos2d-x的使用方法和原理。 cocos2d-x的源码还包含了许多强大的API和工具,例如场景管理、动画控制、音频引擎等,这些工具和API能够帮助开发者更好地完成游戏的开发和调试。 此外,cocos2d-x的源码还提供了完整的游戏开发框架,包括资源管理、内存管理、事件机制等,这些框架可以帮助开发者更好地组织代码和提高代码的可维护性。 总的来说,cocos2d-x游戏源码提供了丰富的工具和API,可以帮助开发者更高效地进行游戏开发,大大降低了开发难度和成本,是一款非常适合游戏开发者使用的引擎。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值