浮云洲之战

浮云洲之战
(seawar.pas/c/cpp)
题目描述
浮云洲是东海岸畔一个风景如画的小岛,信仰海神的渔民们在此世代捕鱼为生。浮云洲
的领导者被称为司卜,掌管岛上的大事,鲁明星就是司卜家的女儿。与浮云洲的居民一样,
鲁明星天生有着对大自然无比的热爱和对小动物的怜悯,但与大家不同的是,小小的她早已
踏遍各地河山,有着面对危险时勇敢果断的号召力和战斗精神。在游历的过程中,鲁明星认
识了精通兵法、武艺超群的豪侠管毅。意趣相投的两人结伴而行,共同来到了浮云洲。此时
恰逢海贼入侵浮云洲,面对软弱的岛民们,鲁明星坚决担负起了组织击退入侵者的重任。
浮云洲的村庄之间通过单向道路连接,构成一个有向无环图。如果在某个村庄安排了守
卫,那么这个守卫可以沿着某一条从这个村庄出发的路径走下去,在路径上的所有道路上安
放战斗设施。现在鲁明星想知道,要想使所有的道路都被安放战斗设施,最少需要多少名守
卫?
输入格式
第一行一个整数 n,表示浮云洲里村庄的个数。
接下来 n 行,每行的第一个数是一个整数,其中第 i+1 行的数是 di,表示从村庄 i 出发
有 di 条道路。每行紧接着会有 di 个整数,表示这些道路到达的村庄。
输出格式
一个整数 ans,表示最少需要的守卫人数。
样例输入
8
1 3
1 7
2 4 5
1 8
1 8
0
2 6 5
0
样例输出
4
数据范围与约定
对于 30% 的数据,满足 2<=n<=10。
对于 100% 的数据,满足 2<=n<=100,0<=di<n,没有重边和自环。

题解:

当时对网络流还不熟悉,后来一反应,这不是一个裸的有下界最小流吗,可惜我当时想到也不会求……

具体方法见我下一篇博文

代码:

  1 const inf=maxlongint;
  2 type node=record
  3      from,go,next,v:longint;
  4      end;
  5 var  tot,i,j,n,m,maxflow,l,r,s,t,x,y,ans,ss,tt:longint;
  6      h,head,q,cur,indeg,outdeg:array[0..500] of longint;
  7      e:array[0..50000] of node;
  8      function min(x,y:longint):longint;
  9       begin
 10       if x<y then exit(x) else exit(y);
 11       end;
 12 procedure ins(x,y,z:longint);
 13  begin
 14  inc(tot);
 15  e[tot].from:=x;e[tot].go:=y;e[tot].v:=z;e[tot].next:=head[x];head[x]:=tot;
 16  end;
 17 procedure insert(x,y,z:longint);
 18  begin
 19  ins(x,y,z);ins(y,x,0);
 20  end;
 21 function bfs:boolean;
 22  var i,x,y:longint;
 23  begin
 24  fillchar(h,sizeof(h),0);
 25  l:=0;r:=1;q[1]:=s;h[s]:=1;
 26  while l<r do
 27   begin
 28   inc(l);
 29   x:=q[l];
 30   i:=head[x];
 31   while i<>0 do
 32    begin
 33    y:=e[i].go;
 34    if (e[i].v<>0) and (h[y]=0) then
 35     begin
 36      h[y]:=h[x]+1;
 37      inc(r);q[r]:=y;
 38     end;
 39    i:=e[i].next;
 40    end;
 41   end;
 42  exit (h[t]<>0);
 43  end;
 44 function dfs(x,f:longint):longint;
 45  var i,y,used,tmp:longint;
 46  begin
 47  if x=t then exit(f);
 48  used:=0;
 49  i:=cur[x];
 50  while i<>0 do
 51   begin
 52   y:=e[i].go;
 53   if (h[y]=h[x]+1) and (e[i].v<>0) then
 54    begin
 55    tmp:=dfs(y,min(e[i].v,f-used));
 56    dec(e[i].v,tmp);if e[i].v<>0 then cur[x]:=i;
 57    inc(e[i xor 1].v,tmp);
 58    inc(used,tmp);
 59    if used=f then exit(f);
 60    end;
 61   i:=e[i].next;
 62   end;
 63  if used=0 then h[x]:=-1;
 64  exit(used);
 65  end;
 66 procedure dinic;
 67  begin
 68  while bfs do
 69   begin
 70   for i:=0 to n+3 do cur[i]:=head[i];
 71   inc(maxflow,dfs(s,inf));
 72   end;
 73  end;
 74 procedure init;
 75  begin
 76  tot:=1;
 77  readln(n);
 78  s:=0;t:=n+1;
 79  ss:=n+2;tt:=n+3;
 80  for i:=1 to n do
 81   begin
 82   read(outdeg[i]);
 83   for j:=1 to outdeg[i] do
 84    begin
 85     read(x);
 86     inc(indeg[x]);
 87     insert(i,x,inf);
 88     insert(i,tt,1);
 89     insert(ss,x,1);
 90    end;
 91   end;
 92  for i:=1 to n do
 93   begin
 94    if indeg[i]=0 then insert(s,i,inf);
 95    if outdeg[i]=0 then insert(i,t,inf);
 96   end;
 97  insert(t,s,inf);
 98  end;
 99 procedure main;
100  begin
101  s:=ss;t:=tt;
102  maxflow:=0;
103  dinic;
104  ans:=e[tot].v;
105  e[tot].v:=0;e[tot xor 1].v:=0;
106  s:=n+1;t:=0;
107  maxflow:=0;
108  dinic;
109  writeln(ans-maxflow);
110  end;
111 begin
112  assign(input,‘input.txt‘);assign(output,‘output.txt‘);
113  reset(input);rewrite(output);
114  init;
115  main;
116  close(input);close(output);
117 end.       

浮云洲之战

时间: 2024-11-08 19:38:07

浮云洲之战的相关文章

C语言 AI智能,五子棋 人机对战,人人对战

C语言五子棋,人机对战,人人对战 [email protected]:~$ cat main.c  # include<stdio.h> # include<string.h> # include<stdlib.h> # define SPA 0 # define MAN 1 # define COM 2    /* 空位置设为0 ,玩家下的位置设为1 ,电脑下的位置设为2 */ int qipan[15][15];    /* 15*15的棋盘 */ int a,b,

二人对战游戏 结构体+函数

class 对战713 { struct Player { public string Name; public int Blood; public int Attact; public int Defence; public int DuoBi; public ArrayList JiNeng; public ArrayList ShangHai; } static void Main (string[] args) { #region 定义技能库 string[] JN; int[] SH;

【UOJ】【UR #2】猪猪侠再战括号序列(splay/贪心)

http://uoj.ac/problem/31 纪念伟大的没有调出来的splay... 竟然那个find那里写错了!!!!!!!!!!!!! 以后要记住:一定要好好想过! (正解的话我就不写了,太简单了.. #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #

轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)

hey,guys!我们一起总结一下JS预解析吧! 首先,我们得搞清楚JS预解析和JS逐行执行的关系.其实它们两并不冲突,一个例子轻松理解它们的关系: 你去酒店吃饭,吃饭前你得看下菜谱,点下菜(JS预解析),但吃的时候还是一口一口的吃(JS逐行执行)! OK,解决下面五个问题,JS预解析就算过了~~(前提:对JS变量作用域有清晰理解) 一.JS预解析是什么? 其实就是对程序要用到的材料(变量,函数)给一个初始值,并存到一个表中(我自己虚构的),当程序运行到那一行时,就来这个表看有没有初始值,没有就

用 MuGo 搭建 Go Engine 在 KGS 对战

MuGo 是一个开源的 Go Engine,下棋能力大概在 10k - 2k 左右. 用 MuGo 搭建 Go Engine 并在 KGS 对战的步骤如下: 1. 安装 TensorFlow 因为 MuGo 要用 Python3,所以要用 Python 3 的 TensorFlow 版本,或者用 Python3 编译源码安装. 2. 下载 MuGo https://github.com/brilee/MuGo 因为 MuGo 是 python 写的,并且自带训练好的 model,所以下载后可以直

20170730 《战狼2》观影纪要

去看<战狼2>的那天,其实本来是打算去看<绣春刀2>的,但是没票了,听说<战狼2>口碑不错,就改了.那天没想到<战狼2>会是一部50亿+票房的主. 由于看完已经两周了,下面仅凭记忆提取下内容概要. 开局就是水下激战的那一段,感觉还行,可能拍的挺辛苦,但是个人感觉没有网络上说的那么震撼.见仁见智了. 观众不禁会想,为什么冷锋跑到一个商用船上,而且还是在非洲.回到三年前,一个拆迁现场,冷锋几个战友带着上一级中牺牲的队长骨灰回到老家,结果战友的老家正在被一个包工头

十年一场云之战,重建这些科技公司与人的技术信仰

2006年是一个开始,当时一个叫做Amazon Web Service的小业务,掀起了一场十年之久.席卷全球的云计算狂潮. 从2000左右年开始的互联网大潮已经让很多科技企业对互联网盲目崇拜,然而自2006年由亚马逊开始的一场云之战,才让更多的传统科技企业彻底失去了方向.因为源自亚马逊的AWS云计算模式,彻底颠覆了微软.IBM.VMware.Oracle.Cisco.HP等一系列曾经的科技巨头,这些曾经被全球其它所有科技公司视为风向标的公司终于风光不在,转而各自寻找新生存与发展方向. 2017年

解密:腾讯如何打造一款实时对战手游

2015年以来,手机游戏的市场偏好,逐渐从早期的休闲类.跑酷类.卡牌类游戏,转向重度.操作性更强的ARPG .FPS..MOBA类游戏.因此实时对战这一游戏玩法,也逐渐成为了手机游戏的一个核心玩法.纵观AppStore畅销榜前十的游戏,过半都支持玩家实时的PK或者合作攻关.由于实时对战有玩家之间自发进行强互动的特点,活跃度和社交强度都是比较高,为游戏的用户活跃和流水的提高奠定了坚实的基础. 腾讯的游戏开发团队,很早就观察到实时对战这一核心玩法对游戏生命周期影响的重要性,因此在自研产品方面,加大力

移动流量入口终于重开 “输入法”暗战人工智能

各家"输入法"此刻用专利问题互相攻伐,其目的除了追求曝光度外,也有分散对手精力,减缓步伐,为自己赢得时间的考量 文/张书乐 刊载于<法人>杂志2016年12月刊 在输入法领域,以熊爪为标识的百度和以狗冠名的搜狗,多年来已经撕咬过多次.近日,百度表示,已正式向北京知识产权法院起诉搜狗侵权,起诉书中称"搜狗拼音输入法"和"搜狗手机输入法"侵犯百度输入法10项技术专利,要求搜狗赔偿金额1亿元. 这是一次年度例行开撕,还是别有所图?2010年