BZOJ4307: Maishroom & Class
感觉有一点题面没有说得特别明确,就是一个人代替了其他人之后,另一个可以被他代替的人就不能让他来代替自己了。
每个人向自己可以代替的人连边,额外增加一个源点$r$向所有助教连边。第一问答案是$r$不能到达的点的个数。对于第二问,求出支配树,每个以$r$为父亲的点的子树中任选两个点都满足条件。
#include<cstdio>
struct edge{
int v;
edge*s;
};
template<int N,int M>
struct graph{
edge*l,e[M],*h[N];
graph():l(e){}
void ins(int u,int v){
*l={v,h[u]};
h[u]=l++;
}
};
const int N=5005;
const int M=25005;
graph<N,M>t1,t2;
graph<N,N>buc;
int n,f[N],par[N],semi[N],ver[N],dom[N],anc[N],lab[N];
void dfs(int u){
semi[u]=++n;
ver[n]=u;
for(edge*i=t1.h[u];i;i=i->s)
if(!semi[i->v]){
par[i->v]=u;
dfs(i->v);
}
}
inline int eval(int u){
if(anc[anc[u]]){
eval(anc[u]);
if(semi[lab[anc[u]]]<semi[lab[u]])
lab[u]=lab[anc[u]];
anc[u]=anc[anc[u]];
}
return lab[u];
}
void sol(int r){
dfs(r);
for(int i=1;i<=n;++i)
lab[ver[i]]=ver[i];
for(int i=n;i>=2;--i){
int u=ver[i];
for(edge*i=t2.h[u];i;i=i->s)
if(semi[i->v]){
int w=eval(i->v);
if(semi[w]<semi[u])
semi[u]=semi[w];
}
buc.ins(ver[semi[u]],u);
anc[u]=par[u];
for(edge*i=buc.h[par[u]];i;i=i->s){
int w=eval(i->v);
dom[i->v]=semi[w]<semi[i->v]?w:par[u];
}
buc.h[par[u]]=0;
}
for(int i=2;i<=n;++i){
int u=ver[i];
if(dom[u]!=ver[semi[u]])
dom[u]=dom[dom[u]];
}
}
void ins(int u,int v){
t1.ins(u,v);
t2.ins(v,u);
}
int main(){
struct{
operator int(){
int x=0,c=getchar();
while(c<48)
c=getchar();
while(c>47)
x=x*10+c-48,c=getchar();
return x;
}
}buf;
int r=buf+1,l=buf;
for(int u=1;u<=l;++u){
int a=buf;
while(a--)
ins(buf,u);
}
for(int u=l+1;u<r;++u)
ins(r,u);
sol(r);
int s=0;
for(int i=n;i>=2;--i){
int&a=f[ver[i]];
int v=dom[ver[i]];
f[v]+=++a;
if(v==r)
s+=a*(a-1)/2;
}
printf("%d %d\n",r-n,s);
}
BZOJ4307: Maishroom & Class的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- Python中optparse模块使用浅析
转载:http://www.jb51.net/article/59296.htm 最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似Linux中一些命令的参数了,比如ls -a,为什么加上-a ...
- python爬虫,从hao123爬取网址信息
最近研究python的爬虫,小小程序,拿下来分享,本人使用python3.7,纯粹兴趣爱好,希望能帮助大家激发兴趣.从hao123,爬取各种网址信息,代码如下. import urllib.reque ...
- Rate Monotonic Scheduling algorithm
这篇文章写得不错 http://barrgroup.com/embedded-systems/How-To/RMA-Rate-Monotonic-Algorithm 另外rtems的官方文档也有类似说 ...
- 【WPF学习笔记】之如何点登录按钮时判断用户名密码进行登录:动画系列之(二)
...... 承接动画系列之(一)的代码: 再添加登录按钮代码进行登录,验证用户名和密码在数据库是否正确. 直接上代码: using System; using System.Collections. ...
- Docker入门系列6 如何打开多个终端进入Docker容器
Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH.如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可.当我启动了五个容器后,每个容器默认是没有配置SS ...
- C语言的运算符的优先级与结合性+ASCII表
[0]README 0.1) 内容来源于 C程序设计语言, 旨在整理出C语言的运算符的优先级与结合性, 如下图所示(哥子 记了大半年都没有记住,也是醉了,每次都要去翻): Alert)以下内容转自:h ...
- 【LeetCode从零单排】No.135Candy(双向动态规划)
1.题目 There are N children standing in a line. Each child is assigned a rating value. You are giving ...
- 公网yum 源地址
1. centos5.* 公网yum 源地址 [root@web ~]# cd /etc/yum.repos.d/[root@web yum.repos.d]# wget -O /etc/yum.r ...
- JavaScript 原型解析
1.什么是对象? javascript中除了null和undefined之外都是Object的实例. 在Javascript中, 每定义一个函数, 将伴生一个原型对象. 原型就是用来为同一类对 ...
- 子串的索引 str.index(sub) sub必须存在
ii.lstrip(' ')[0:2]=='//' ii.lstrip(' ').index('//')==0