本文共 1395 字,大约阅读时间需要 4 分钟。
恶心的可并堆套可并堆
我之前天真地以为直接并查集可搞
经过一下午DEBUG,完成之后,发现无法处理负数QAQ
于是喊冬哥给我开了一波车,帮助我两个小时打完了可并堆套可并堆并AC啦QAQ
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define rre(i,r,l) for(int i=(r);i>=(l);i--) 14 #define re(i,l,r) for(int i=(l);i<=(r);i++) 15 #define Clear(a,b) memset(a,b,sizeof(a)) 16 #define inout(x) printf("%d",(x)) 17 #define douin(x) scanf("%lf",&x) 18 #define strin(x) scanf("%s",(x)) 19 #define LLin(x) scanf("%lld",&x) 20 #define op operator 21 #define CSC main 22 typedef unsigned long long ULL; 23 typedef const int cint; 24 typedef long long LL; 25 using namespace std; 26 void inin(int &ret) 27 { 28 ret=0;int f=0;char ch=getchar(); 29 while(ch<'0'||ch>'9'){ if(ch=='-')f=1;ch=getchar();} 30 while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar(); 31 ret=f?-ret:ret; 32 } 33 int quan,w[300030]; 34 int sta[300030],top; 35 struct heap 36 { 37 int ch[300030][2],fa[300030],tag[300030]; 38 void down(int k) 39 { 40 if(!tag[k])return ; 41 w[ch[k][0]]+=tag[k]; 42 w[ch[k][1]]+=tag[k]; 43 tag[ch[k][0]]+=tag[k]; 44 tag[ch[k][1]]+=tag[k]; 45 tag[k]=0; 46 } 47 int merge(int l,int r) 48 { 49 if(!l||!r)return l+r; 50 if(w[l]
转载于:https://www.cnblogs.com/HugeGun/p/5208047.html