首页 > 其他分享 >第二周训练题单

第二周训练题单

时间:2023-08-03 12:58:06浏览次数:33  
标签:return 训练 int tot fa 第二周 mp find 题单

R、parity game

#include<bits/stdc++.h>

using namespace std;
#define int long long
const int N = 1e5 + 50;

int n, m, fa[N], r[N];
map<int, int> mp;
int ans, cnt = 0;

int find (int x) {
    if (fa[x] == -1) return x;
    int pre = find (fa[x]);
    r[x] = (r[x] + r[fa[x]]) % 2;
    return fa[x] = pre;
}

bool Union (int u, int v, int w) {
    int fu = find (u);
    int fv = find (v);
    if (fu == fv)
        return (r[v] - r[u] + 2) % 2 != w;
    fa[fv] = fu;
    r[fv] = (-r[v] + w + r[u] + 2) % 2;
    return false;
}

signed main () {
    cin >> n >> m;
    memset (fa, -1, sizeof fa);
    memset (r, 0, sizeof r);
    ans = m;
    for (int i = 1; i <= m; i++) {
        int u, v;
        char s[5];
        cin >> u >> v >> s;
        u--;
        if (mp.find (u) == mp.end ()) mp[u] = ++cnt;
        if (mp.find (v) == mp.end ()) mp[v] = ++cnt;
        int k = (int) (s[0] == 'o');
        if (ans == m && Union (mp[u], mp[v], k))
            ans = i - 1;
    }
    mp.clear ();
    cout << ans << endl;
}
#include <bits/stdc++.h>

using namespace std;
int n, m, tot, res, b[100010], fa[100010];
#define int long long

struct node {
    int u, v;
    string op;
} a[100010];

inline int find (int x) {
    if (fa[x] == x) return x;
    return fa[x] = find (fa[x]);
}

signed main () {
    ios::sync_with_stdio (false);
    cin.tie (nullptr), cout.tie (nullptr);
    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        cin >> a[i].u >> a[i].v;
        cin >> a[i].op;
        b[++tot] = a[i].u;
        b[++tot] = a[i].v;
    }
    sort (b + 1, b + 1 + tot);
    res = unique (b + 1, b + 1 + tot) - (b + 1);
    for (int i = 1; i <= m; i++) {  //STL实现离散化的三部曲
        a[i].u = lower_bound (b + 1, b + 1 + res, a[i].u - 1) - b;
        a[i].v = lower_bound (b + 1, b + 1 + res, a[i].v) - b;
    }
    for (int i = 1; i <= 2 * res; i++) fa[i] = i;
    for (int i = 1; i <= m; i++) {
        if (a[i].op == "even"){  //如果回答是偶数个
            if (find (a[i].u) == find (a[i].v + res) || find (a[i].u + res) == find (a[i].v)){  //判断奇偶性
                cout << i - 1 << " ";   //注意是i-1而不是i
                return 0;
            }
            fa[find (a[i].u)] = find (a[i].v);
            fa[find (a[i].u + res)] = find (a[i].v + res);
        } else {
            if (find (a[i].u) == find (a[i].v) || find (a[i].u + res) == find (a[i].v + res)){
                cout << i - 1;
                return 0;
            }
            fa[find (a[i].u)] = find (a[i].v + res);
            fa[find (a[i].u + res)] = find (a[i].v);
        }
    }
    cout << m << endl;
    return 0;
}

标签:return,训练,int,tot,fa,第二周,mp,find,题单
From: https://www.cnblogs.com/Lazyboyjdj/p/17603016.html

相关文章

  • Android手部检测和手势识别(含训练代码+Android源码+手势识别数据集)
    Android手部检测和手势识别(含训练代码+Android源码+手势识别数据集)目录Android实时手势动作识别(含训练代码++手势识别数据集)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类识别方法3.手势识别数据集说明(1)HaGRID手势识别数据集(2)自定义数据集4.基于......
  • 语义检索系统之排序模块:基于ERNIE-Gram的Pair-wise和基于RocketQA的CrossEncoder训练
    语义检索系统之排序模块:基于ERNIE-Gram的Pair-wise和基于RocketQA的CrossEncoder训练的单塔模型文本匹配任务数据每一个样本通常由两个文本组成(query,title)。类别形式为0或1,0表示query与title不匹配;1表示匹配。基于单塔Point-wise范式的语义匹配模型ernie_matchi......
  • 语义检索系统:基于无监督预训练语义索引召回:SimCSE、Diffcse
    基于无监督预训练语义索引召回:SimCSE、Diffcse语义索引(可通俗理解为向量索引)技术是搜索引擎、推荐系统、广告系统在召回阶段的核心技术之一。语义索引模型的目标是:给定输入文本,模型可以从海量候选召回库中快速、准确地召回一批语义相关文本。语义索引模型的效果直接决定了语义相......
  • 基于无监督训练SimCSE+In-batch Negatives策略有监督训练的语义索引召回
    基于无监督训练SimCSE+In-batchNegatives策略有监督训练的语义索引召回语义索引(可通俗理解为向量索引)技术是搜索引擎、推荐系统、广告系统在召回阶段的核心技术之一。语义索引模型的目标是:给定输入文本,模型可以从海量候选召回库中快速、准确地召回一批语义相关文本。语义索引模......
  • 2023牛客暑期多校训练营5
    之前落下的每一场比赛都是要补回来的。。。GGotoPlayMaimaiDX题解的想法比较简单,由于找到满足1,2,3出现至少一次,4出现至少k次的最短区间,所以可以双指针,双指针用于这种长度最短,长度越长越容易满足条件的题就很恰当。我没想到双指针,就写的比较麻烦,预处理每个数后一个1,2,3的位置......
  • 构建易于运维的 AI 训练平台:存储选型与最佳实践
    伴随着公司业务的发展,数据量持续增长,存储平台面临新的挑战:大图片的高吞吐、超分辨率场景下数千万小文件的IOPS问题、运维复杂等问题。除了这些技术难题,我们基础团队的人员也比较紧张,负责存储层运维的仅有1名同事,因而组件的易用性,一直也是我们评估的重要维度。我们尝试过文件......
  • 代码随想录算法训练营第四十三天| 583. 两个字符串的删除操作 72. 编辑距离
    583.两个字符串的删除操作要求:删除最少的步数,来让这两个字符串相等思路:求末尾的最长公共子序列的长度,然后减去他们的长度代码:1//要求:两个字符串,删除任意一个字符后,让这两个字符相等2//dp[n][m]以n-1结尾的字符串变成节点为m-1为子序列的最大个数3//4//求......
  • 【腾讯云Cloud Studio实战训练营】使用Cloud Studio快速开发一个3D家具个性化定制应用
    目录前言: 一、腾讯云CloudStudio介绍:1、接近本地IDE的开发体验2、多环境可选,或连接到云主机3、随时分享预览效果4、兼容VSCode插件 5、AI代码助手二、腾讯云CloudStudio项目实践(3D家具个性化定制应用)1、注册并登录CloudStudio2、进入Vue预置开发环境2.1登录成功进入C......
  • 代码随想录算法训练营第四十一天| 1143.最长公共子序列 1035.不相交的线 53. 最大
    1143.最长公共子序列  要求:可以跳过,找出来最长符合的节点难点:如何跳过了之后仍然保留之前的值思路:如果不符,并不是dp[i-1][j-2]等于之前的值,而是dp[i][j]等于它的相关节点以上很重要代码:1//要求:两个子数组,可以删减跳过,找出最长的长度2//思路:dp[n][m]代表第......
  • 代码随想录算法训练营第五天|力扣242.有效的字母异位词、力扣242.两个数组的交集、力
    哈希表哈希表理论基础哈希表,又称为散列表(HashTable),是根据关键码的值而直接进行访问的数据结构其中,数组就是一张哈希表;表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素哈希表解决的问题:一般哈希表都是用来快速判断一个元素是否出现在集合中哈希函数:把学生的......