标签:return efi cst int 合并 ace fread 计算 amp
来自FallDream的博客,未经允许,请勿转载, 谢谢。
#include<iostream> #include<cstdio> #include<algorithm> #define rint register int #define getchar() (*S++) #define MN 100000 #define ll long long char B[1<<26],*S=B; using namespace std; inline int read() { int x = 0 , f = 1; char ch = getchar(); while(ch < ‘0‘ || ch > ‘9‘){ if(ch == ‘-‘) f = -1; ch = getchar();} while(ch >= ‘0‘ && ch <= ‘9‘){x = x * 10 + ch - ‘0‘;ch = getchar();} return x * f; } int n,m,cnt=0,fa[MN*2+5]; ll ans=0; struct data{int x,c,r;}a[MN+5]; bool b[MN*2+5]; bool cmp(data a,data b){return a.x<b.x;} inline int getfa(int x){return !fa[x]?x:fa[x]=getfa(fa[x]);} int main() { fread(B,1,1<<26,stdin); n=read();m=read(); for(rint i=1;i<=n;++i) for(rint j=1;j<=m;++j) a[++cnt]=(data){read(),i,j+n}; sort(a+1,a+cnt+1,cmp); for(rint i=1;i<=cnt;++i) { int x=getfa(a[i].c),y=getfa(a[i].r); if(!(b[x]&b[y])) { if(x!=y) fa[x]=y,b[y]|=b[x]; else b[x]=1; ans+=a[i].x; } } printf("%lld\n",ans); return 0; }
[bzoj4883][Lydsy2017年5月月赛]棋盘上的守卫
标签:return efi cst int 合并 ace fread 计算 amp
原文地址:http://www.cnblogs.com/FallDream/p/bzoj4883.html