佬佬求调|66pts

P1196 [NOI2002] 银河英雄传说

改了以后的这个55pts~~555~~ ```#include<iostream> using namespace std; int pre[30005]; int ran[30005]; int frn[30005]; int bak[30005]; void Merge(int x,int y) { int sx = x,fy = y,fx = x; while(bak[fy] != fy) fy = bak[fy]; while(1) { frn[sx] = frn[fy]; ran[sx] = ran[sx] + ran[fy]; if(sx == pre[sx]) break; sx = pre[sx]; } while(fx != bak[fx]) { frn[bak[fx]] = frn[fy]; ran[bak[fx]] = ran[fx]+1; fx = bak[fx]; } if(fy == sx) return; else { //cout << fy << ' ' << sx << endl; bak[fy] = sx; pre[sx] = fy; } } int main() { for(int i = 1;i <= 30000;i++) { pre[i] = i; bak[i] = i; frn[i] = i; ran[i] = 1; } long long t; cin >> t; for(int i = 1;i <= t;i++) { char a; int x,y; cin >> a >> x >> y; if(a == 'M') Merge(x,y); if(a == 'C') { if(frn[x] == frn[y]) cout << abs(ran[x] - ran[y])-1 << endl; else cout << -1 << endl; } } //cout << ran[1] << ' ' << ran[30000] << endl; //cout << frn[1] << ' ' << frn[30000] << endl; return 0; }
by Smithespics @ 2023-03-25 22:09:47


|