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

RT。写的时候不会离散化,然后用map实现,但是只有六十分。主体思路还是种类并查集,大佬可以看看代码嘛。```cpp #include #include #include #include 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:27
加载中...