经典的最大权闭合子图问题;

这种问题的求解思路是:

建图:将s连边向权值为正的点,通过依赖关系连接权值为正的点和权值为负的点,权值为负的点连边向t;

求c=最小割,a=所有权值为正的节点权值和,ans=a-c;

证明过程网上是有的;

用dinic敲的,但是用的还不熟练;

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<cstdlib>
 6 #include<ctime>
 7 #include<algorithm>
 8 using namespace std;
 9 const int maxn=200;
10 const int inf=1000000000;
11 const int s=0,t=120;
12 struct node{
13     int y,next,flow,re;
14 }e[maxn*10];
15 int linkk[maxn],len=0,n,m,g[maxn][maxn],cnt[maxn],w[maxn],sum=0;
16 void print(int x){printf("%d\n",x);}
17 void print(int x,int y){printf("%d %d\n",x,y);}
18 void insert(int x,int y,int flow){
19     e[++len].y=y;e[len].flow=flow;
20     e[len].next=linkk[x];linkk[x]=len;e[len].re=len+1;
21     e[++len].y=x;e[len].flow=0;
22     e[len].next=linkk[y];linkk[y]=len;e[len].re=len-1;
23 }
24 bool flag=0;
25 int read(){
26     int x=0;char ch=getchar();
27     while(ch<'0'||ch>'9')ch=getchar();
28     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
29     if(ch=='\n')flag=1;
30     return x;
31 }
32 void init(){
33     scanf("%d%d",&n,&m);
34     int v;
35     for(int i=1;i<=n;i++){
36         scanf("%d",&v);insert(s,i,v);
37         flag=0;sum+=v;
38         while(!flag){cnt[i]++;g[i][cnt[i]]=read();}
39     }
40     for(int i=1;i<=m;i++)scanf("%d",&w[i]);
41     for(int i=1;i<=n;i++)
42         for(int j=1;j<=cnt[i];j++)
43             insert(i,g[i][j]+n,inf);
44     for(int i=1;i<=m;i++)insert(i+n,t,w[i]);
45 }
46 int q[maxn],tail=0,level[maxn],head=0;
47 bool bfs(){
48     memset(level,-1,sizeof(level));
49     head=0;tail=0;level[s]=1;q[++tail]=s;
50     while(++head<=tail){
51         int x=q[head];
52         for(int i=linkk[x];i;i=e[i].next){
53             if(level[e[i].y]==-1&&e[i].flow){
54                 q[++tail]=e[i].y;
55                 level[e[i].y]=level[x]+1;
56             }
57         }
58     }
59     return level[t]>0;
60 }
61 int find(int x,int flow){
62     if(x==t)return flow;
63     int maxflow=0,d=0;
64     for(int i=linkk[x];i&&maxflow<flow;i=e[i].next){
65         if(level[e[i].y]==level[x]+1&&e[i].flow){
66             if(d=find(e[i].y,min(flow-maxflow,e[i].flow))){
67                 maxflow+=d;
68                 e[i].flow-=d;
69                 e[e[i].re].flow+=d;
70             }
71         }
72     }
73     if(!maxflow)level[x]=-1;
74     return maxflow;
75 }
76 void work(){
77     int d=0,ans=0;
78     while(bfs())
79         while(d=find(s,inf))
80             ans+=d;
81     cout<<sum-ans<<endl;
82 }
83 int main(){
84     //freopen("1.in","r",stdin);
85     //freopen("1.out","w",stdout);
86     init();
87     work();
88 }

View Code

转载于:https://www.cnblogs.com/chadinblog/p/5861607.html

太空飞行计划 网络流相关推荐

  1. 【网络流24题-2】太空飞行计划 网络流

    题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合 E={E1,E2,-,Em},和进行这些实验需要使用的全部仪器 ...

  2. 网络流24题之太空飞行计划——最大权闭合子图

    题目链接:太空飞行计划 [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W ...

  3. Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)

    [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...

  4. LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图

    #6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

  5. 题解 【网络流24题】太空飞行计划

    [网络流24题]太空飞行计划 Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,- ...

  6. LOJ6001 - 「网络流 24 题」太空飞行计划

    原题链接 Description 有m(m≤50)个实验和n(n≤50)个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬−仪器花费),并输出一组方案. Solution ...

  7. [网络流24题] No2_太空飞行计划

    727. [网络流24题] 太空飞行计划 ★★☆   输入文件:shuttle.in   输出文件:shuttle.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] W ...

  8. PowerOJ 1737 网络流24题之二 太空飞行计划问题(最大权闭合子图)

    PowerOJ 1737 网络流24题之二 太空飞行计划问题 原题地址: https://www.oj.swust.edu.cn/problem/show/1737 题意: W 教授正在为国家航天中心 ...

  9. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)

    整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...

最新文章

  1. html调用百度地图语音播报,实现百度地图导航演示的语音播放功能
  2. Java有哪些从业方向?分享这9个
  3. An internal error occurred during: “AppXray Indexing
  4. Java 数字数组随机数工具类 NumberUtils、ArrayUtils、RandomUtils用法
  5. startup毕业论文
  6. LeetCode MySQL 1667. 修复表中的名字
  7. cad图形如何导入到奥维地图_【详细教程】奥维地图上查看项目的线路图或平面图...
  8. 嵌入式操作系统内核原理和开发(任务创建和堆栈溢出检查)
  9. Python 爬取 42 年高考数据,告诉你高考为什么这么难?
  10. scala递归求斐波那契数列
  11. `json in遍历
  12. 用python简单处理图片(5):图像直方图
  13. mysql 密码过期解决图例_MYSQL 密码过期解决办法
  14. vb mysql 实例,vb数据库(vb编辑access数据库实例)
  15. 9篇分布式机器学习系统经典论文;深度学习硬件的黄金十年|AI系统前沿动态...
  16. 峰会倒计时3天!硅谷传奇投资人登陆专场,围炉共话分析型数据库的爆发式增长
  17. Codeforces Round #622 C2 - Skyscrapers
  18. 速读区块链十年历史 2010年-2020年回顾
  19. Win11中,睡眠、休眠、关闭显示器的区别
  20. java通过struts实现web中的文件下载

热门文章

  1. python使用协程实现udp_python-socket和进程线程协程(代码展示)
  2. Linux学习之diction的编译与使用
  3. python中的order_Hive中Order by和Sort by的区别是什么?
  4. 信息安全工程师笔记-案例分析(四)
  5. Qt文档阅读笔记-单元测试中构建标准检测程序(CPU、Linux性能、内存泄漏等)
  6. 前端笔记-通过jQuery获取input数据及html中name的使用
  7. Java笔记-多线程协调及ReentrantLock的使用
  8. C++工作笔记-对|,这些位运算的进一步认识
  9. linux grub2 修复,Ubuntu 10.04修复GRUB2
  10. mysql部署练习_MySQL主从练习 - osc_b9r67jnt的个人空间 - OSCHINA - 中文开源技术交流社区...