s向所有类别属性连流量为当前类别属性需要的个数的边,所有题目向t连流量为1的边(表示只能选一次),所有属性向含有它的题连容量为1的边。跑一变dinic,结果小于m则无解,否则看每一个类别属性连出去的题目的边是否满流,满流代表这个属性选择这道题

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. #include<cstring>
  5. using namespace std;
  6. const int N=1000005,inf=1e9;
  7. int n,m,h[N],cnt=1,s,t,le[N],sum;
  8. bool vs[N],vt[N];
  9. string c;
  10. struct qwe
  11. {
  12. int ne,to,va;
  13. }e[N<<1];
  14. int read()
  15. {
  16. int r=0,f=1;
  17. char p=getchar();
  18. while(p>'9'||p<'0')
  19. {
  20. if(p=='-')
  21. f=-1;
  22. p=getchar();
  23. }
  24. while(p>='0'&&p<='9')
  25. {
  26. r=r*10+p-48;
  27. p=getchar();
  28. }
  29. return r*f;
  30. }
  31. void add(int u,int v,int w)
  32. {
  33. cnt++;
  34. e[cnt].ne=h[u];
  35. e[cnt].to=v;
  36. e[cnt].va=w;
  37. h[u]=cnt;
  38. }
  39. void ins(int u,int v,int w)
  40. {//cout<<u<<" "<<v<<" "<<w<<endl;
  41. add(u,v,w);
  42. add(v,u,0);
  43. }
  44. bool bfs()
  45. {
  46. queue<int>q;
  47. memset(le,0,sizeof(le));
  48. le[s]=1;
  49. q.push(s);
  50. while(!q.empty())
  51. {
  52. int u=q.front();
  53. q.pop();
  54. for(int i=h[u];i;i=e[i].ne)
  55. if(e[i].va>0&&!le[e[i].to])
  56. {
  57. le[e[i].to]=le[u]+1;
  58. q.push(e[i].to);
  59. }
  60. }
  61. return le[t];
  62. }
  63. int dfs(int u,int f)
  64. {
  65. if(u==t||f==0)
  66. return f;
  67. int us=0;
  68. for(int i=h[u];i&&us<f;i=e[i].ne)
  69. if(e[i].va>0&&le[e[i].to]==le[u]+1)
  70. {
  71. int t=dfs(e[i].to,min(e[i].va,f-us));
  72. e[i].va-=t;
  73. e[i^1].va+=t;
  74. us+=t;
  75. }
  76. if(!us)
  77. le[u]=0;
  78. return us;
  79. }
  80. int dinic()
  81. {
  82. int re=0;
  83. while(bfs())
  84. re+=dfs(s,inf);
  85. return re;
  86. }
  87. int main()
  88. {
  89. m=read(),n=read();
  90. s=0,t=m+n+1;
  91. for(int i=1;i<=m;i++)
  92. {
  93. int x=read();
  94. sum+=x;
  95. ins(s,i,x);
  96. }
  97. for(int i=1;i<=n;i++)
  98. {
  99. int p=read();
  100. for(int j=1;j<=p;j++)
  101. {
  102. int x=read();
  103. ins(x,i+m,1);
  104. }
  105. ins(i+m,t,1);
  106. }
  107. if(dinic()<sum)
  108. {
  109. puts("No Solution!");
  110. return 0;
  111. }
  112. for(int u=1;u<=m;u++)
  113. {
  114. printf("%d: ",u);
  115. for(int i=h[u];i;i=e[i].ne)
  116. if(e[i].to!=s&&!e[i].va)
  117. printf("%d ",e[i].to-m);
  118. puts("");
  119. }
  120. return 0;
  121. }

洛谷 P2763 试题库问题【最大流】的更多相关文章

  1. 洛谷P2763 试题库问题(最大流)

    题意 $n$道试题,每道题有多种类别属性 抽取$m$道题组成试卷,要求包含指定的类型 输出方案 Sol 又是一道zz网络流 我的构图长这样,$k_i$表示第$i$道试题需要的数量 #include&l ...

  2. 洛谷 P2763 试题库问题(网络流24题之一)

    题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...

  3. 洛谷P2763 试题库问题(最大流)

    传送门 网络流界的一股清流啊……终于没那么变态了…… 考虑一下怎么建图.对于每一个类型,我们从$S$向他连边,容量为它所需的题数,表明它要可以有这么多题,对于每一道题目,我们从它对应的类型向他连边,容 ...

  4. [洛谷P2763]试题库问题

    题目大意:有 $k$ 种类型和 $n$ 个题目,每个题目会适应部分类型,第$i$个类型需要$s_i$的题,一道题只能满足一种类型,现要求出满足所有类型的题目的方案 题解:看到匹配,想到网络流,源点向试 ...

  5. 洛谷 [P2763]试题库问题

    非常舒适的最大流 非常显然的建图方法,然而因为数组开小卡了很长时间 #include <iostream> #include <cstdio> #include <alg ...

  6. P2763 试题库问题(dinic)

    P2763 试题库问题 dinic 搞个虚拟源点和汇点,瞎建建边就好辣. 偷张图↓↓ 如果没满流就是无解辣 输出方案咋办呢? 枚举每种类型,蓝后枚举它们的边 如果该边被使用了(通过判断反向边的流量), ...

  7. 【题解】 P2763 试题库问题(网络流)

    P2763 试题库问题 考虑一个试题要被加入进答案的集合有什么条件? 是某种类型 只算作一次 就这两种且的限制,所以我们用串联的方式连接"类型点"和"作用点". ...

  8. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码

    [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...

  9. 网络流问题 P2763 试题库问题

    题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...

随机推荐

  1. BZOJ 4894 有向图 外向生成树个数

    4894: 天赋 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 191  Solved: 150[Submit][Status][Discuss] D ...

  2. bzoj4161 (k^2logn求线性递推式)

    分析: 我们可以写把转移矩阵A写出来,然后求一下它的特征多项式,经过手动计算应该是这样的p(x)=$x^k-\sum\limits_{i=1}^ka_i*x^{k-i}$ 根据Cayley-Hamil ...

  3. Date日期模式

    package cn.zmh.Date; import java.text.SimpleDateFormat; import java.util.Date; public class DateDemo ...

  4. 报错:An error occurred at line: 22 in the generated java file The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

    org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 22 in ...

  5. datasnap中间件如何控制长连接的客户端连接?

    ActiveConnections: TClientDataSet; ... 有客户端连接上来的时候 procedure TForm8.DSServer1Connect(DSConnectEventO ...

  6. pycharm查看代码注释的方法,代码编写日志及作者信息等

    竟然在边栏有个右键的快捷键.annotate可以查看代码书写日期及作者 鼠标悬停可以看到更加详细的时间等信息 原理应该是利用git blame

  7. [BLE--Physical Layer]

    简述 BLE的物理层,可能做IC或板极硬件RF測试的会比較关注. 是偏硬件层面的. 频率带宽和信道分配 BLE工作于2.4 GHz ISM频段2400-2483.5 MHz,ISM频段是公用的,不须要 ...

  8. MySQL 资源大全

    干货!MySQL 资源大全 提交 我的留言 加载中 已留言 shlomi-noach 发起维护的 MySQL 资源列表,内容覆盖:分析工具.备份.性能测试.配置.部署.GUI 等. 伯乐在线已在 Gi ...

  9. 字符设备之poll机制

    poll机制作用:相当于一个定时器.时间到了还没有资源就唤醒进程. 主要用途就是:进程设置一段时间用来等待资源,假设时间到了资源还没有到来,进程就立马从睡眠状态唤醒不再等待.当然这仅仅是使用于这段时间 ...

  10. iOS国际化:NSLocalizedString的使用

    因为iOS和XCode版本号更新得太快的原因,导致网上非常多文章都失去了时效性,或许再过两三个月我这篇文章也将走上这条路,但起码能够让现阶段看到的人对iOS的国际化有个比較清楚的认识. NSLocal ...