如果給相同的位置連邊,最後聯通塊數是n,最後答案就是$9*10^$
但直接連邊是$o(n^2)$的
所以事先處理出乙個st表,每次o(1)地給那個st錶連邊
最後再一點一點下放,就是把在這層的同一集合的的左兒子連到乙個裡,右兒子連到乙個裡
統計最下面那一層的聯通塊數量就行了
1 #include2#define pa pair3
#define clr(a,x) memset(a,x,sizeof(a))
4using
namespace
std;
5 typedef long
long
ll;6
const
int maxn=1e5+10,logn=20,p=1e9+7;7
8inline ll rd()
11while(c>='
0'&&c<='
9') x=x*10+c-'
0',c=getchar();
12return x*neg;13}
1415
int id[maxn][20],pct,fa[maxn*logn],ch[maxn*logn][2
];16
intn,m;
17bool flag[maxn*logn];
1819 inline int getf(int x)
20 inline void
makest()
28//
printf("%d %d\n",i,id[i][0]);29}
30for(int i=1;i<=pct;i++) fa[i]=i;31}
3233 inline pa get(int l,int
r)37
38 inline void add(int a,int
b)42
43int
main()
53for(i=17;i;i--)60}
61}62int cnt=0;63
for(i=1;i<=n;i++)
6667 ll ans=9;68
for(i=1;i<=cnt-1;i++) ans=(ans*10)%p;
69 printf("
%d\n
",ans);
70return0;
71 }
BZOJ 4569 萌萌噠 (並查集)
time limit 10 sec memory limit 256 mb description 乙個長度為n的大數,用s1 s2 s3 sn表示,其中si表示數的第i位,s1是數的最高位,告訴你一些限制條件,每個條 件表示為四個數,l1,r1,l2,r2,即兩個長度相同的區間,表示子串sl1 s...
BZOJ4569 萌萌噠 倍增 並查集
沒想到這兩個東西還可以這麼用,我們可以用f i j 表示 i i 2 j 1 這一段區間屬於哪乙個集合,沒有則等於0.那麼每次合併我們可以把這個限制拆成log個區間,依次合併起來。若f i j 和f s t 同屬乙個集合,那麼f i j 1 和f s t 1 f i 2j 1 j 1 和f s 2t...
SCOI2016 萌萌噠 並查集 倍增
傳送門 一開始是想賭一把,把節點乙個乙個的unite,然後懷著wa的心情wa了。然後又準備用離散去優化,然後又懷著wa的心情wa了。萬般無奈去查題解,發現竟然要使用倍增?倍增是啥,我多少年沒有用過了 複習了一波倍增,原來倍增也可以用在並查集上,我對並查集又有了新的理解,這個資料結構,好強啊!incl...