cafelier のSRM参加記録です。コンテスト中に考えてたことを執拗に全部書き残すとどうなるだろうかという試み本番中にこういうコードが書きたかったなあ、という後で書いた反省コードを書き残す試み
スパムが来たのでしばらくコメント欄をはてなユーザ限定にしています、すみません、
あとで | |
ちょっとRogueの潜りすぎで忙しくて参加できなかったのであとで解いてみる
class PerfectPermutation { public: int reorder(vector <int> P) { vector<bool> used(P.size(), false); int nLoop = 0; for(int i=0; i<P.size(); ++i) if( !used[i] ) { ++nLoop; for(int p=i; !used[p]; p=P[p]) used[p] = true; } return nLoop==1 ? 0 : nLoop; } };
class StrangeCountry { public: int transform(vector <string> g) { int nConn=g.size(), nEdge=0; vector<int> uf(g.size(), -1); // union-find for(int x=0; x<g.size(); ++x) { if( g[x].find('Y')==-1 ) return -1; // orphan for(int y=x+1; y<g.size(); ++y) if( g[x][y]=='Y' ) { ++nEdge; int rx=x; while( uf[rx]>=0 ) rx=uf[rx]; int ry=y; while( uf[ry]>=0 ) ry=uf[ry]; if( rx != ry ) uf[rx]=ry, --nConn; } } int redundant = nEdge - (g.size() - nConn); return redundant>=nConn-1 ? nConn-1 : -1; } };
presented by cafelier/k.inaba under