2502: 清理雪道

题意:任意点出发任意次每条边至少经过一次最小花费。


下界1,裸最小流....

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. #define fir first
  7. #define sec second
  8. typedef long long ll;
  9. const int N=1005, M=4e5+5, INF=1e9;
  10. inline ll read(){
  11. char c=getchar();ll x=0,f=1;
  12. while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
  13. while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
  14. return x*f;
  15. }
  16. int n, m, x, s, t, tot, extra[N];
  17. struct edge{int v, c, f, ne, lower;}e[M];
  18. int cnt=1, h[N];
  19. inline int ins(int u, int v, int c, int b=0) {
  20. e[++cnt]=(edge){v, c, 0, h[u], b}; h[u]=cnt;
  21. e[++cnt]=(edge){u, 0, 0, h[v], b}; h[v]=cnt;
  22. return cnt-1;
  23. }
  24. int q[N], head, tail, vis[N], d[N], cur[N];
  25. bool bfs(int s, int t) {
  26. memset(vis, 0, sizeof(vis));
  27. head=tail=1;
  28. q[tail++]=s; d[s]=0; vis[s]=1;
  29. while(head!=tail) {
  30. int u=q[head++];
  31. for(int i=h[u];i;i=e[i].ne)
  32. if(!vis[e[i].v] && e[i].c>e[i].f) {
  33. vis[e[i].v]=1; d[e[i].v]=d[u]+1;
  34. q[tail++]=e[i].v;
  35. if(e[i].v == t) return true;
  36. }
  37. }
  38. return false;
  39. }
  40. int dfs(int u, int a, int t) {
  41. if(u==t || a==0) return a;
  42. int flow=0, f;
  43. for(int &i=cur[u];i;i=e[i].ne)
  44. if(d[e[i].v]==d[u]+1 && (f=dfs(e[i].v, min(a, e[i].c-e[i].f), t))>0) {
  45. flow+=f;
  46. e[i].f+=f;
  47. e[i^1].f-=f;
  48. a-=f;
  49. if(a==0) break;
  50. }
  51. if(a) d[u]=-1;
  52. return flow;
  53. }
  54. int dinic(int s, int t) {
  55. int flow=0;
  56. while(bfs(s, t)) {
  57. for(int i=0; i<=tot; i++) cur[i]=h[i];
  58. flow+=dfs(s, INF, t);
  59. }
  60. return flow;
  61. }
  62. int main() {
  63. freopen("in","r",stdin);
  64. n=read(); s=0; t=n+1;
  65. for(int i=1; i<=n; i++) {
  66. m=read();
  67. while(m--) x=read(), ins(i, x, INF, 1), extra[i]--, extra[x]++;
  68. ins(s, i, INF); ins(i, t, INF);
  69. }
  70. int ss=t+1, tt=t+2, sum=0; tot=tt;
  71. for(int i=s; i<=t; i++) {
  72. if(extra[i]>0) ins(ss, i, extra[i]), sum+=extra[i];
  73. if(extra[i]<0) ins(i, tt, -extra[i]);
  74. }
  75. ins(t, s, INF);
  76. int flow=dinic(ss, tt); //printf("flow %d\n",flow);
  77. int feas = e[cnt-1].f;
  78. e[cnt-1].c = e[cnt].c = 0;
  79. printf("%d",feas-dinic(t, s));
  80. }

BZOJ 2502: 清理雪道 [最小流]的更多相关文章

  1. BZOJ 2502: 清理雪道

    BZOJ 2502: 清理雪道 标签(空格分隔): OI-BZOJ OI-最小流 OI-上下界网络流 Time Limit: 10 Sec Memory Limit: 128 MB Descripti ...

  2. bzoj 2502 清理雪道 (有源汇上下界最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MB Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场 ...

  3. BZOJ 2502 Luogu P4843 清理雪道 最小流

    题意: 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞机 ...

  4. BZOJ 2502 清理雪道(有源汇上下界最小流)

    题面 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞机, ...

  5. bzoj 2502 清理雪道(有源汇的上下界最小流)

    [题意] 有一个DAG,要求每条边必须经过一次,求最少经过次数. [思路] 有上下界的最小流.  边的下界为1,上界为无穷.构造可行流模型,先不加ts边跑一遍最大流,然后加上t->s的inf边跑 ...

  6. bzoj 2502: 清理雪道【有上下界有源汇最小流】

    对于原有边,流区间是(1,inf),按着原边连,然后再连(s,i,(0,inf)),(i,t,(0,inf))表示任意位置进出雪场 按着这个建出新图 然后最小流的方法是先跑可行流,设ans为(t,s, ...

  7. Bzoj 2502: 清理雪道 有上下界网络流_最小流

    好长时间没有写网络流了,感觉好手生.对于本题,设一个源点 $s$ 和 $t$.1.由 $s$ 向每个点连一条没有下界,容量为无限大的边,表示以该点为起点.2.由每个点向 $t$ 连一条没有下界,容量为 ...

  8. BZOJ 2502 清理雪道/ Luogu P4843 清理雪道 (有源汇上下界最小流)

    题意 有一个有向无环图,求最少的路径条数覆盖所有的边 分析 有源汇上下界最小流板题,直接放代码了,不会的看dalao博客:liu_runda 有点长,讲的很好,静心看一定能看懂 CODE #inclu ...

  9. BZOJ 2502: 清理雪道 | 有上下界最小流

    #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #defi ...

随机推荐

  1. struts中用kindeditor实现的图片上传并且显示在页面上

    做公司网站的时候由于需要在内容属性中加入图片,所以就有了这个问题,本来一开始找几篇文章看都是讲修改kindeditor/jsp/file_manager_json.jsp和upload_json.js ...

  2. ASP.NET没有魔法——ASP.NET MVC路由

    之前的文章中介绍了My Blog文章维护功能的开发,开发过程中使用Area的方法建立了用于维护文章的Controller.View和Model.但是无论代码怎么变对于浏览器来说都是通过一个url地址去 ...

  3. java中static关键字的继承问题

    结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用 ...

  4. 十二个 ASP.NET Core 例子——中间件

    目录: 什么是中间件(IApplicationBuilder) 创建 顺序规则 Asp.Net Core 内置的中间件 1.什么是中间件 官方:中间件是组装成应用程序管道以处理请求和响应的软件.每个组 ...

  5. 在form里面,放了四个UEditor,怎么在后台分别获取它们值

    1) 默认情况下提交到后台的表单名称是 "editorValue",在editor_config.js中可以配置,参数名为textarea. 2) 可以在容器标签(即script标 ...

  6. iOS学习之Map,定位,标记位置的使用

    iOS上使用地图比Android要方便,只需要新建一个MKMapView,addSubView即可.这次要实现的效果如下: 有标注(大头针),定位,地图. 1.添加地图 1.1 新一个Single V ...

  7. django下命令行工具

    django-admin.py是Django的一个用户管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每个Django Project里面都包含一个manage. ...

  8. Activity内切换fragment实现底部菜单切换遇到的坑

    1.一般说来,app底部导航都会设计为5个菜单,可以使用textView,也可使用radioButton,这里我选择用radioButton,给radioButton直接设置selector就可以实现 ...

  9. scrapy_随机user-agent

    什么是user-agent? 用户代理,服务器识别用户的操作系统,浏览器类型和渲染引擎,不同浏览器的user-agent是不同的 如何随机更改user-agent? 1. 在setting中添加use ...

  10. python_如何对字典进行排序?

    案例: 某班英语成绩以字典的形式存储为: {'lili':78, 'jin':50, 'liming': 30, ......} 依据成绩高低,进行学生成绩排名 如何对字典排序? 方法1: #!/us ...