Milking Order

题意:给出m个描述状态,其中包含若干个边的关系,问最多能取x (x<=m)个状态,使得形成的图没有环。就是说取x个状态,用状态中的关系建边,其中不能有环。

题解:最大化x?和二分答案有点关系。所以首先要二分x,判断是否有环。这个可以用拓扑或者tarjan。我用的是拓扑,判环的依据是队尾t是否等于n,如果不等于n,则一定有环。(只有入度等于1才进队)于是操作就有点复杂了,(我会在程序里标记)。最后因为要字典序最小,要用堆来输出答案。

 var
q,head,next,rd,a,b,id,ans,f:array[..]of longint;
e,i,j,mid,x,y,z,l,r,t,len,n,k,tot,m:longint;
procedure add(x,y:longint);
begin
inc(e);next[e]:=head[x];head[x]:=e; a[e]:=y;id[e]:=i;
end;
function check(mid:longint):boolean; var i,h,tail:longint;
begin
fillchar(rd,sizeof(rd),);
fillchar(q,sizeof(q),);
tail:=; t:=;
for i:= to e do
begin
if id[i]<=mid then
begin
inc(rd[a[i]]);
end;
end; for i:= to n do
if rd[i]= then
begin
inc(t);
inc(tail);
q[tail]:=i;
end;
if tail= then exit(false);
h:=;
while h<tail do
begin
inc(h);
i:=head[q[h]];
while (id[i]>mid)and(i>) do begin i:=next[i]; end;// 判断边是否超过mid while (i>) do
begin
dec(rd[a[i]]);
if rd[a[i]]= then
begin
inc(t);inc(tail);q[tail]:=a[i];
// if mid = then writeln(tail);
end;
i:=next[i];
while (i>)and(id[i]>mid) do i:=next[i]; //同样判断
end;
end; if t=n then exit(true) else exit(false);
end;
procedure make(x:longint);
var now,father,t:longint;
begin
inc(len);
f[len]:=x;
now:=len;
while (now>)and(f[now>>]>f[now]) do
begin
father:=now>>;
t:=f[father];
f[father]:=f[now];
f[now]:=t;
now:=father;
end;
end; function detele:longint;
var fa,son,t:longint;
ss:boolean;
begin
k:=f[];
f[]:=f[len];
dec(len);
fa:=;ss:=false;
while ((fa*<=len)or(fa*+<=len))and(not ss) do
begin
if (fa*+>len) or(f[fa*]<f[fa*+]) then
son:=fa* else son:=fa*+;
if f[fa]>f[son] then
begin
t:=f[fa];
f[fa]:=f[son];
f[son]:=t;
fa:=son;
end
else break;
end;
end; begin
readln(n,m);
for i:= to m do
begin
read(x);
for j:= to x do
begin
read(y);
if j> then begin add(z,y); end;
z:=y;
end;
end;
l:=;r:=m;
while l<=r do//二分答案模板(
begin
mid:=(l+r) div ;
//writeln(l,' ',r);
if check(mid) then l:=mid+ else r:=mid-; end;
l:=l-;//直到这里) fillchar(rd,sizeof(rd),);
for i:= to e do
begin
if id[i]<=l then
begin
inc(rd[a[i]]);
end;
end;
for i:= to n do
begin
if rd[i]= then make(i);//堆操作
end;
tot:=;
while tot<n do
begin
inc(tot);
detele;
write(k,' ');//堆操作
i:=head[k];
while (id[i]>l)and(i>) do i:=next[i];//判断是否大于二分答案的最终答案 while i> do
begin
dec(rd[a[i]]);
if rd[a[i]]= then make(a[i]);
i:=next[i];
while (i>)and(id[i]>mid) do i:=next[i];//也需要判断
end;
end;
end.

Milking Order的更多相关文章

  1. 【二分+拓扑排序】Milking Order @USACO 2018 US Open Contest, Gold/upc_exam_6348

    目录 Milking Order @USACO 2018 US Open Contest, Gold/upc_exam_6348 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 MEA ...

  2. BZOJ5280: [Usaco2018 Open]Milking Order(二分+拓扑)

    5280: [Usaco2018 Open]Milking Order Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 123  Solved: 62[ ...

  3. [Usaco2018 Open]Milking Order

    Description Farmer John的N头奶牛(1≤N≤10^5),仍然编号为1-N,正好闲得发慌.因此,她们发展了一个与Farmer John每天早上为她们挤牛奶的时候的排队顺序相关的复杂 ...

  4. [BZOJ5280] [Usaco2018 Open]Milking Order

    Description Farmer John的N头奶牛(1≤N≤105),仍然编号为1…N,正好闲得发慌.因此,她们发展了一个与Farmer John每 天早上为她们挤牛奶的时候的排队顺序相关的复杂 ...

  5. 【杂题1】USACO 2018 Open Contest-练习

    https://www.xoj.red/contests/show/1231 下面会写一些题目的解析什么的,当然不会粘贴题目只是简单提一下 (部分题目简单的题目就不概括了) 其实难度应该前面比较低. ...

  6. codeforce ---A. Milking cows

    A. Milking cows time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  7. 在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY

    正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade   随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...

  8. BZOJ 1391: [Ceoi2008]order [最小割]

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1509  Solved: 460[Submit][Statu ...

  9. Android中的Libraries以及Order and Export的使用。

    1Add JAR 从Eclipse的现有所有工程中,添加jar包到该工程下 2Add External JARs 从Eclipse外的其他的位置,添加jar包到该工程下 3Add Variable 增 ...

随机推荐

  1. 如何给SAP C4C的产品主数据division配置出新的下拉选项

    如图:C4C产品主数据division字段默认的下拉菜单选项: 切换成调试模式,找到UI这个字段绑定的模型字段名称:/Root/MaterialDivision: 再找到这个UI模型字段绑定到的cor ...

  2. SQL表创建注意事项

    CREATE TABLE V_USER ( AUTOID ), USERID BYTE) NOT NULL, USERNAME BYTE) NOT NULL, USERPASSWORD BYTE) N ...

  3. 【[ZJOI2005]午餐】

    首先我们得贪心一下,让吃饭时间较长的人排在队首 去抄一段贪心的证明吧 现在研究在一个队伍里的人有什么性质 可以发现道题里也有一个不变量,就是对于队伍里的前\(i\)个人,不管他们排队的顺序如何,\(a ...

  4. [JLOI2016/SHOI2016]侦察守卫

    嘟嘟嘟 这道题可以说是[HNOI2003]消防局的设立的升级版.距离从2改为了d. 辛亏d只有20,这也就是一个切入点. 令f[u][j]表示u四周 j - 1的距离需要被覆盖,g[u][j]表示u可 ...

  5. java8的4大核心函数式接口

    //java8的4大核心函数式接口//1.Consumer<T>:消费性接口//需求:public void happy(double money, Consumer<Double& ...

  6. jQuery Cookie操作cookie

    jQuery cookie下载地址:http://plugins.jquery.com/cookie/ 使用jquery.cookie.js依赖于jquery 基本用法:   1. 创建cookie ...

  7. [转]ASP.NET母版页中对控件ID的处理

    一.问题提出 由于总体排版和设计的需要,我们往往创建母版页来实现整个网站的统一性,最近我由于统一性的需要,把原来整个项目单独的页面全部套用了母版页.但是出现了一个错误……在我的Blog中记录一下,方便 ...

  8. Android 进价5_自定义广播 通过广播更新ListView的适配器 下载管理

    1.在处理下载管理时,服务在后台运行,下载完成后要更新listview列表的按钮,将“下载”改成“打开”这样一个功能. 在Activity里面写一个静态内部类,继承广播.其中属性text_button ...

  9. HDU 1006 Tick and Tick(时钟,分钟,秒钟角度问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1006 Tick and Tick Time Limit: 2000/1000 MS (Java/Oth ...

  10. 关于结构体占用空间大小总结(#pragma pack的使用)

    关于C/C++中结构体变量占用内存大小的问题,之前一直以为把这个问题搞清楚了,今天看到一道题,发现之前的想法完全是错误的.这道题是这样的: 在32位机器上,下面的代码中 class A { publi ...