可能是退役前的最后一次交流

队爷们的神题选讲

yjc:CF235D

奇怪小容斥

枚举点对(x,y)表示以x为重心能分治到y的期望,树上直接用两点间距离求,中间有环就 左边不断+右边不断-两边都不断 容斥一下

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=3005;
 6 int n,f,b,t1,t2,cnt,tot; 
 7 int deg[N],que[N],vis[N];
 8 int p[N],noww[N<<1],goal[N<<1];
 9 double ans;
10 void Link(int f,int t)
11 {
12     noww[++cnt]=p[f];
13     goal[cnt]=t,p[f]=cnt;
14     noww[++cnt]=p[t];
15     goal[cnt]=f,p[t]=cnt;
16 }
17 void DFS(int nde,int len,int cor)
18 {
19     vis[nde]=true;
20     if(deg[nde]==2) cor++;
21     if(cor>=2) ans+=1.0/len+1.0/(len+tot-cor*2+2)-1.0/(len+tot-cor);
22     else ans+=1.0/len;
23     for(int i=p[nde],g;i;i=noww[i])
24         if(!vis[g=goal[i]]) DFS(g,len+1,cor);
25 }
26 int main()
27 {
28     scanf("%d",&n);
29     for(int i=1;i<=n;i++)
30     {
31         scanf("%d%d",&t1,&t2),t1++,t2++;
32         Link(t1,t2),deg[t1]++,deg[t2]++;
33     }
34     f=0,b=-1;
35     for(int i=1;i<=n;i++)
36         if(deg[i]==1) que[++b]=i;
37     while(f<=b)
38     {
39         int tn=que[f++];
40         for(int i=p[tn],g;i;i=noww[i])
41             if((--deg[g=goal[i]])==1) que[++b]=g;
42     }
43     for(int i=1;i<=n;i++) tot+=(deg[i]==2);
44     for(int i=1;i<=n;i++) 
45         memset(vis,0,sizeof vis),DFS(i,1,0);
46     printf("%.7f",ans);
47     return 0;
48 }

(不折叠代码来假装这篇文章有很多内容的博主是屑

tbl:2018 Chinese Multi-University Training, BeihangU Contest L(CF102114)

yzh:一道题

算贡献,本质是给边定向,对未来承诺

dp[i][j][k]表示到达j个其中k个在i的子树内

发现复杂度高达$O(n^6)$,预处理一些东西

(摔

zky的

ywy:HAOI2017字符串

i207M的

说了半天就写了一道题?

转载于:https://www.cnblogs.com/ydnhaha/p/10623159.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值