题目描述

农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流。这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相连,a2与a3相连,等等,那么电脑a1和a(c)就可以互发电邮。

很不幸,有时候奶牛会不小心踩到电脑上,农夫约翰的车也可能碾过电脑,这台倒霉的电脑就会坏掉。这意味着这台电脑不能再发送电邮了,于是与这台电脑相关的连接也就不可用了。

有两头奶牛就想:如果我们两个不能互发电邮,至少需要坏掉多少台电脑呢?请编写一个程序为她们计算这个最小值。

以如下网络为例:

1*

/ 3 - 2*

这张图画的是有2条连接的3台电脑。我们想要在电脑1和2之间传送信息。电脑1与3、2与3直接连通。如果电脑3坏了,电脑1与2便不能互发信息了。

输入输出格式

输入格式:

第一行 四个由空格分隔的整数:N,M,c1,c2.N是电脑总数(1<=N<=100),电脑由1到N编号。M是电脑之间连接的总数(1<=M<=600)。最后的两个整数c1和c2是上述两头奶牛使用的电脑编号。连接没有重复且均为双向的(即如果c1与c2相连,那么c2与c1也相连)。两台电脑之间至多有一条连接。电脑c1和c2不会直接相连。

第2到M+1行 接下来的M行中,每行包含两台直接相连的电脑的编号。

输出格式:

一个整数表示使电脑c1和c2不能互相通信需要坏掉的电脑数目的最小值。

输入输出样例

输入样例#1:

  1. 3 2 1 2
  2. 1 3
  3. 2 3
输出样例#1:

  1. 1
 
 
  最小割

  1. #include <cstdio>
  2. #include <queue>
  3. #define N 30000
  4. #define inf 0x3f3f3f3f
  5. using namespace std;
  6.  
  7. int n,m,S,T,c1,c2,cnt=,to[N<<],dep[N],cur[N],head[N],nextt[N<<],flow[N<<];
  8. inline void ins(int u,int v,int f)
  9. {
  10. nextt[++cnt]=head[u];to[cnt]=v;flow[cnt]=f;head[u]=cnt;
  11. nextt[++cnt]=head[v];to[cnt]=u;flow[cnt]=;head[v]=cnt;
  12. }
  13. bool bfs()
  14. {
  15. for(int i=;i<=n<<;++i) dep[i]=-,cur[i]=head[i];
  16. queue<int>q;
  17. dep[S]=;
  18. q.push(S);
  19. for(int u;!q.empty();)
  20. {
  21. u=q.front();
  22. q.pop();
  23. for(int i=head[u];i;i=nextt[i])
  24. {
  25. int v=to[i];
  26. if(dep[v]==-&&flow[i])
  27. {
  28. dep[v]=dep[u]+;
  29. if(v==T) return true;
  30. q.push(v);
  31. }
  32. }
  33. }
  34. return false;
  35. }
  36. inline int min(int a,int b) {return a>b?b:a;}
  37. int dfs(int u,int limit)
  38. {
  39. if(u==T||!limit) return limit;
  40. int res=,f;
  41. for(int i=head[u];i;i=nextt[i])
  42. {
  43. int v=to[i];
  44. if(dep[v]==dep[u]+&&flow[i]&&(f=dfs(v,min(limit,flow[i]))))
  45. {
  46. flow[i]-=f;
  47. flow[i^]+=f;
  48. limit-=f;
  49. res+=f;
  50. if(!limit) break;
  51. }
  52. }
  53. if(res!=limit) dep[u]=-;
  54. return res;
  55. }
  56. int dinic()
  57. {
  58. int ret=;
  59. while(bfs()) ret+=dfs(S,inf);
  60. return ret;
  61. }
  62. int main(int argc,char *argv[])
  63. {
  64. scanf("%d%d%d%d",&n,&m,&S,&T);
  65. S+=n;
  66. for(int i=;i<=n;++i) ins(i,i+n,);
  67. for(int u,v;m--;)
  68. {
  69. scanf("%d%d",&u,&v);
  70. ins(u+n,v,inf);
  71. ins(v+n,u,inf);
  72. }
  73. printf("%d\n",dinic());
  74. return ;
  75. }

洛谷 P1345 [USACO5.4]奶牛的电信Telecowmunication的更多相关文章

  1. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码

    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication[最小割]分析+题解代码 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流. ...

  2. 洛谷——P1345 [USACO5.4]奶牛的电信Telecowmunication

    P1345 [USACO5.4]奶牛的电信Telecowmunication 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮 ...

  3. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  4. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication(最小割)

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  5. 洛谷$P1345\ [USACO5.4]$ 奶牛的电信$Telecowmunication$ 网络流

    正解:最小割 解题报告: 传送门$QwQ$ $QwQ$好久没做网络流了来复健下. 这个一看就很最小割趴?考虑咋建图?就把点拆成边权为$1$的边,然后原有的边因为不能割所以边权为$inf$. 然后跑个最 ...

  6. 洛谷P1345 [USACO5.4]奶牛的电信 [最小割]

    题目传送门 奶牛的电信 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,..., ...

  7. 洛谷P1345 [USACO5.4]奶牛的电信(最小割)

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  8. 洛谷P13445 [USACO5.4]奶牛的电信Telecowmunication(网络流)

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  9. 洛谷1345 [USACO5.4]奶牛的电信Telecowmunication

    原题链接 最小割点数转换成最小割边数的模板题(不过这数据好小). 每个点拆成两个点,连一条容量为\(1\)的边,原图的边容量定为\(+\infty\),然后跑最大流即可. 这里用的是\(Dinic\) ...

随机推荐

  1. SpringBoot使用拦截器无效

    附上代码: public class WendaWebConfiguration extends WebMvcConfigurerAdapter { @Autowired PassportInterc ...

  2. 世界虽大,但没有破不了的wifi

    附加知识: 无线网卡的几种常见工作模式(mode)有: master  managed monitor ad-hoc ... 1. [master] 这种模式是常见的AP模式,无线模块本身作为wifi ...

  3. HDU 5546 Ancient Go (搜索)

    题意: Alice和Bob正在下古代围棋,规则如下: 棋盘有8×8个格子,棋子下在棋盘的交叉点上,故可以有9×9个落子的位置 Alice执黑棋Bob执白棋轮流落子 与棋子直线相连的空白交叉点叫做气.当 ...

  4. ZOJ 3512 Financial Fraud (左偏树)

    题意:给定一个序列,求另一个不递减序列,使得Abs(bi - ai) 和最小. 析:首先是在每个相同的区间中,中位数是最优的,然后由于要合并,和维护中位数,所以我们选用左偏树来维护,当然也可以用划分树 ...

  5. (I/O完成端口中的)995错误

    在windows下,可能会出现995的错误,msdn对该错误的解释为: The I/O operation has been aborted because of either a thread ex ...

  6. C语言学习总结

    输出加法程序 #include<stdio.h> int main() { printf("#include<stdio.h>\n\n"); printf( ...

  7. PHP面向对象--接口实例

    我们设计一个在线销售系统,用户部分设计如下: 将用户分为,NormalUser, VipUser, InnerUser三种. 要求根据用户的不同折扣计算用户购买产品的价格. 并要求为以后扩展和维护预留 ...

  8. 51nod1108(曼哈顿距离)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1108 题意:中文题诶- 思路:曼哈顿距离,题目没要求所求点要在 ...

  9. nginx 反向代理配置 upstream

    最近项目要写后台,用nodejs写服务接口,然后研究了下nginx反向代理,各种坑下来,也总算把代理配了下来. 我本地用nodejs起了两个服务,一个端口是8888,一个端口是8889,在启动ngin ...

  10. express解决ajax跨域访问session失效问题

    最近在学习express,就用以前做的项目来进行express前后端分离的练手了,在做登陆注册的时候发现跨域的时候,session的值是会失效的,导致session里面的数据获取为undefined, ...