密云建站推广,页面访问升级老域名,seo工具,找设计师的网站本来想做一道搜索 最后发现是一道并查集的水题 如果两个邻格之间没有路 就把他们合并就行了 #include cstdio
#include cstring
#include iostream
#include algorithm
using namespace std;
const int MAXN105;
const int MAXM20005;
inline …本来想做一道搜索 最后发现是一道并查集的水题 如果两个邻格之间没有路 就把他们合并就行了 #include cstdio
#include cstring
#include iostream
#include algorithm
using namespace std;
const int MAXN105;
const int MAXM20005;
inline int read(){int x0,f1,chgetchar();while(ch0||ch9){if(ch-)f-1;chgetchar();}while(ch0ch9){xx*10ch-0;chgetchar();}return x*f;
}
int f[MAXM];
inline int find(int x){return f[x](f[x]x)?f[x]:find(f[x]);
}
inline bool same(int x,int y){return find(x)find(y);
}
inline void add(int x,int y){f[find(x)]find(y);
}
int a[MAXN][MAXN];
int b[MAXN][MAXN];
int siz[MAXM];
int q[MAXM],tail;
int main(){int nread(),kread(),rread();for(int i1;in;i)for(int j1;jn;j)f[i*nj]i*nj;for(int i1;ir;i){int r1read(),c1read(),r2read(),c2read();if(r1r21) a[r2][c1]1;if(r2r11) a[r1][c1]1;if(c1c21) b[r1][c2]1;if(c2c11) b[r1][c1]1;}for(int i1;in;i)for(int j1;jn;j){if(!a[i][j]in) add(i*nj,i*njn);if(!b[i][j]jn) add(i*nj,i*nj1);}for(int i1;ik;i){int rread(),cread();if(!siz[find(r*nc)]) q[tail]find(r*nc);siz[find(r*nc)];}int ans0;// couttailendl;for(int i1;itail;i) anssiz[q[i]]*(k-siz[q[i]]),k-siz[q[i]];printf(%d\n,ans);return 0;
}转载于:https://www.cnblogs.com/gcyyzf/p/9850190.html