没打,简单补档

C.Edgy Trees

容斥,把黑边断掉数联通块,每个联通块贡献$siz^k$

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,mod=1e9+;
int n,k,t1,t2,t3,tot,aset[N],siz[N];
int Finda(int x)
{
return x==aset[x]?x:aset[x]=Finda(aset[x]);
}
int Qpow(int x,int k)
{
if(k<=) return k?x:;
int tmp=Qpow(x,k>>);
return 1ll*tmp*tmp%mod*((k&)?x:)%mod;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++) aset[i]=i,siz[i]=;
for(int i=;i<n;i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
if(!t3)
{
int nx=Finda(t1),ny=Finda(t2);
aset[nx]=ny,siz[ny]+=siz[nx];
}
}
for(int i=;i<=n;i++)
if(aset[i]==i) (tot+=Qpow(siz[i],k))%=mod;
printf("%d",(Qpow(n,k)-tot+mod)%mod);
return ;
}

D.Steps to One

我写的辣鸡的$O(n\log n\sqrt n)$(并跑不满),太菜了

设dp[i]表示当前为i的期望步数,暴力DP即枚举1->m从gcd转移,改为枚举gcd(指所有因子),然后莫比乌斯函数统计1->n中和某个数互质的数的个数

 #include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define vint vector<int>
#define vit vector<int>::iterator
using namespace std;
const int N=,mod=1e9+;
int dp[N],pri[N],npr[N],mul[N];
int n,t,in,cnt,ans; vint fac[N];
void Add(int &x,int y)
{
x+=y;
if(x>=mod) x-=mod;
}
int Qpow(int x,int k)
{
if(k<=) return k?x:;
int tmp=Qpow(x,k>>);
return 1ll*tmp*tmp%mod*((k&)?x:)%mod;
}
void Pre()
{
in=Qpow(n,mod-);
for(int i=;i<=n;i++)
for(int j=*i;j<=n;j+=i)
fac[j].push_back(i);
npr[]=true,mul[]=;
for(int i=;i<=n;i++)
{
if(!npr[i]) pri[++cnt]=i,mul[i]=-;
for(int j=;j<=cnt&&(t=i*pri[j])<=n;j++)
{
npr[t]=true;
if(i%pri[j]==) break;
else mul[t]=-mul[i];
}
}
}
int Count(int x,int y)//Count:for i=1 to n,gcd(i,x)==y
{
int N=n/y,X=x/y,ret=;
for(int i=;i*i<=X;i++)
if(X%i==)
{
ret+=N/i*mul[i];
if(i*i!=X) ret+=N/(X/i)*mul[X/i];
}
return ret;
}
int main()
{
scanf("%d",&n),Pre(),dp[]=;
for(int i=;i<=n;i++)
{
int tmp=n/i;
for(vit it=fac[i].begin();it!=fac[i].end();it++)
t=*it,Add(dp[i],1ll*dp[t]*Count(i,t)%mod*in%mod);
dp[i]=1ll*(dp[i]+)*Qpow(n-tmp,mod-)%mod*n%mod;
}
for(int i=;i<=n;i++) Add(ans,dp[i]);
printf("%lld",1ll*ans*in%mod);
return ;
}

呃,发现题解也不怎么快,他是用2^质因子个数容斥算的,$2^6*6$怕不是跟非常跑不满的根号差不多

E.Maximize Mex

显然答案单调不升,把每种潜力值和每个club看做左右部点,倒着加边,每次在上次的基础上继续二分图匹配到没有增广路为止

注意潜力值是从零开始的,还有每次跑完记得更新dfn

 #include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define vint vector<int>
#define vit vector<int>::iterator
using namespace std;
const int N=;
int n,m,q,t1,t2,dfn;
int val[N],bel[N],lft[N];
int del[N],vis[N],mth[N],ans[N]; vint ve[N];
bool DFS(int nde)
{
int t;
for(vit it=ve[nde].begin();it!=ve[nde].end();it++)
if(vis[t=*it]!=dfn)
{
vis[t]=dfn;
if(mth[t]==-||DFS(mth[t]))
{mth[t]=nde; return true;}
}
return false;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&val[i]);
for(int i=;i<=n;i++) scanf("%d",&bel[i]);
for(int i=;i<=m;i++) mth[i]=-; dfn=;
scanf("%d",&q);
for(int i=;i<=q;i++)
scanf("%d",&lft[i]),del[lft[i]]=true;
for(int i=;i<=n;i++)
if(!del[i]) ve[val[i]].push_back(bel[i]);
for(int i=q,mex=-;i;i--)
{
while(DFS(mex+)) mex++,dfn++; ans[i]=mex+,dfn++;
ve[val[lft[i]]].push_back(bel[lft[i]]);
}
for(int i=;i<=q;i++) printf("%d\n",ans[i]);
return ;
}

F.Dish Shopping

Codeforces Round #548的更多相关文章

  1. Codeforces Round 548 (Div. 2)

    layout: post title: Codeforces Round 548 (Div. 2) author: "luowentaoaa" catalog: true tags ...

  2. Codeforces Round #548 (Div. 2) F splay(新坑) + 思维

    https://codeforces.com/contest/1139/problem/F 题意 有m个人,n道菜,每道菜有\(p_i\),\(s_i\),\(b_i\),每个人有\(inc_j\), ...

  3. Codeforces Round #548 (Div. 2) E 二分图匹配(新坑) or 网络流 + 反向处理

    https://codeforces.com/contest/1139/problem/E 题意 有n个学生,m个社团,每个学生有一个\(p_i\)值,然后每个学生属于\(c_i\)社团, 有d天,每 ...

  4. CodeForces Round #548 Div2

    http://codeforces.com/contest/1139 A. Even Substrings You are given a string s=s1s2…sns=s1s2…sn of l ...

  5. Codeforces Round #548 (Div. 2) C dp or 排列组合

    https://codeforces.com/contest/1139/problem/C 题意 一颗有n个点的树,需要挑选出k个点组成序列(可重复),按照序列的顺序遍历树,假如经过黑色的边,那么这个 ...

  6. C. Edgy Trees Codeforces Round #548 (Div. 2) 并查集求连通块

    C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  7. Codeforces Round #548 (Div. 2) D 期望dp + 莫比乌斯反演

    https://codeforces.com/contest/1139/problem/D 题意 每次从1,m中选一个数加入队列,假如队列的gcd==1停止,问队列长度的期望 题解 概率正着推,期望反 ...

  8. C. Edgy Trees Codeforces Round #548 (Div. 2) 【连通块】

    一.题面 here 二.分析 这题刚开始没读懂题意,后来明白了,原来就是一个数连通块里点数的问题.首先在建图的时候,只考虑红色路径上的点.为什么呢,因为为了不走红色的快,那么我们可以反着想只走红色的路 ...

  9. Codeforces Round #548 (Div. 2) C. Edgy Trees

    You are given a tree (a connected undirected graph without cycles) of 

随机推荐

  1. .NET持续集成与自动化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器

    使用NuGet.Server搭建公司内部的Nuget(包)管理器 前言     Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展.在使用Visual Studio开发基 ...

  2. RabbitMQ 发布订阅-实现延时重试队列(参考)

    RabbitMQ消息处理失败,我们会让失败消息进入重试队列等待执行,因为在重试队列距离真正执行还需要定义的时间间隔,因此,我们可以将重试队列设置成延时处理.今天参考网上其他人的实现,简单梳理下消息延时 ...

  3. iphone忘记锁屏密码却记得appleID密码的不保存数据的刷机办法

    请注意看清题目再看本文,另外一切后果博主不负任何责任.操作实现环境:原装数据线,拔掉sim卡昨天,iPhone6sp忘记密码被锁定,尝试通过找回手机抹除手机功能后,提示需要手机接入互联网才能实现,而我 ...

  4. [朴孝敏][Ooh La La]

    歌词来源:http://music.163.com/#/song?id=484058960 作曲 : Damon Sharpe/Jimmy Burney/Adam Kapit [作曲 : Damon ...

  5. xmlSpy套件(Altova MissionKit 2016)的Ollydbg调试过程及破解

    最近工作需要用到XML处理软件,网上找到Altova MissionKit 2016( 包含了XmlSpy.MapForce.StyleVision.UModel.DatabaseSpy等工具),用了 ...

  6. Python - 内置函数 选例

    概览参见  https://www.runoob.com/python/python-built-in-functions.html 官方文档 https://docs.python.org/3/li ...

  7. HTTP请求头和响应头部包括的信息有哪些?

    每个HTTP请求和响应都会带有相应的头部信息.默认情况下,在发送XHR请求的同时,还会发送下列头部信息: Accept:浏览器能够处理的内容类型 Accept-Charset:浏览器能够显示的字符集 ...

  8. 软工个人博客作业Week 1

    问题1:在瀑布模型中提到模型,模型(模拟版本)和原型有什么不同,如果与原型有同样的功能,那为什么称之为模型?如果没有同样的功能,又是怎么测试那些程序的? 问题2:怎样才能高效率的广泛而深入地了解用户的 ...

  9. 结对项目https://github.com/bxoing1994/test/blob/master/源代码

    所选项目名称:文本替换      结对人:曲承玉 github地址 :https://github.com/bxoing1994/test/blob/master/源代码 结对人github地址:ht ...

  10. iOS 模拟器“安装”app

    1.首先在模拟器上运行我们的app程序 2.执行以下命令: ditto -ck --sequesterRsrc --keepParent `ls - -d -t ~/Library/Developer ...