用map来水数据,为什么只有六十分?
查看原帖
用map来水数据,为什么只有六十分?
939830
JunYao0楼主2024/4/24 15:28

RT。写的时候不会离散化,然后用map实现,但是只有六十分。主体思路还是种类并查集,大佬可以看看代码嘛。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
using namespace std;
map<int, int>fa;
int find(int x)
{
    return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void merge(int x,int y)
{
    fa[find(x)] = find(y);
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int n,m; cin >> n>>m;
    int cnt = 0;
    for (int i=1;i<=m;i++)
    {
        string s;
        int a, b; cin >> a >> b >> s;
        if (cnt > 0)continue;
        if (fa.find(a-1) == fa.end())
        {
            fa[a-1] = a-1, fa[a-1 + n] = a-1 + n;
        }
        if (fa.find(b) == fa.end())
        {
            fa[b] = b, fa[b + n] = b + n;
        }
        if (s[0]=='e')
        {
            if (find(a - 1) == find(b + n)) { cnt = i; continue;}
            else
            {
                merge(a-1,b);
                merge(a-1+n,b+n);
            }
        }
        else if(s[0]=='o')
        {
            if (find(a - 1) == find(b)) { cnt = i; continue;}
            else
            {
                merge(a-1,b+n);
                merge(a-1+n,b);
            }
        }
    }
    if (cnt == 0)cout << m << endl;
    else cout << cnt - 1 << endl;

    return 0;
}

2024/4/24 15:28
加载中...