出题人没素质啊,强行拼题还把题面写得又臭又长。

简单题面就是有一张图,每条边有两个权值\(t,s\),有无限支军队,一支军队可以打一个点,代价是从n到这个点的路径的\(\frac{\sum t}{\sum s}\)。

有m条限制,每条限制就是a,b两个点至少选一个,求最小代价。

首先第一部分也就是要求每个点的代价,显然分数规划,随便做做就没了。

第二部分就是裸的最小割,随便做做就没了。

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define vd void
  4. typedef long long ll;
  5. il int gi(){
  6. int x=0,f=1;
  7. char ch=getchar();
  8. while(!isdigit(ch)){
  9. if(ch=='-')f=-1;
  10. ch=getchar();
  11. }
  12. while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
  13. return x*f;
  14. }
  15. #define maxn 710
  16. int n,m;
  17. struct edge{int d,t,s;};
  18. std::vector<edge>G[maxn];
  19. double W[maxn],dist[maxn];int s[maxn],_s[maxn];
  20. il vd SPFA(double Mid){
  21. static bool inq[maxn];
  22. static int que[maxn],hd,tl;
  23. for(int i=1;i<=n;++i)dist[i]=1e9;
  24. hd=tl=0;que[tl++]=n;dist[n]=0;
  25. while(hd^tl){
  26. int x=que[hd];
  27. for(int i=0;i<G[x].size();++i)
  28. if(dist[G[x][i].d]>dist[x]+G[x][i].t-Mid*G[x][i].s){
  29. dist[G[x][i].d]=dist[x]+G[x][i].t-Mid*G[x][i].s;
  30. if(!inq[G[x][i].d])inq[G[x][i].d]=1,que[tl++]=G[x][i].d,tl%=maxn;
  31. }
  32. inq[x]=0;++hd;hd%=maxn;
  33. }
  34. }
  35. il vd solve(int l,int r,double L,double R){
  36. if(R-L<1e-3){
  37. L=(L+R)*0.5;
  38. for(int i=l;i<=r;++i)W[s[i]]=L;
  39. return;
  40. }
  41. if(l>r)return;
  42. double Mid=(L+R)*0.5;
  43. SPFA(Mid);
  44. int _l=l-1,_r=r+1;
  45. for(int i=l;i<=r;++i)
  46. if(dist[s[i]]<0)_s[++_l]=s[i];
  47. else _s[--_r]=s[i];
  48. memcpy(s+l,_s+l,4*(r-l+1));
  49. solve(l,_l,L,Mid);
  50. solve(_r,r,Mid,R);
  51. }
  52. #define maxm 100000
  53. int fir[maxn],head[maxn],dep[maxn],dis[maxm],nxt[maxm],id=1,S=maxn-1,T=maxn-2;double w[maxm];
  54. il vd link(int a,int b,double c){
  55. nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=c;
  56. nxt[++id]=fir[b],fir[b]=id,dis[id]=a,w[id]=0;
  57. }
  58. il bool BFS(){
  59. static int que[maxn],hd,tl;
  60. hd=tl=0;que[tl++]=S;
  61. memset(dep,0,sizeof dep);dep[S]=1;
  62. while(hd^tl){
  63. int x=que[hd++];
  64. for(int i=fir[x];i;i=nxt[i])
  65. if(w[i]>1e-5&&!dep[dis[i]])
  66. dep[dis[i]]=dep[x]+1,que[tl++]=dis[i];
  67. }
  68. return dep[T];
  69. }
  70. il double Dinic(int x,double maxflow){
  71. if(x==T)return maxflow;
  72. double ret=0;
  73. for(int i=fir[x];i;i=nxt[i])
  74. if(w[i]>1e-5&&dep[dis[i]]==dep[x]+1){
  75. double d=Dinic(dis[i],std::min(w[i],maxflow-ret));
  76. w[i]-=d,w[i^1]+=d,ret+=d;
  77. if(maxflow-ret<1e-6)break;
  78. }
  79. return ret;
  80. }
  81. int main(){
  82. #ifndef ONLINE_JUDGE
  83. freopen("2494.in","r",stdin);
  84. freopen("2494.out","w",stdout);
  85. #endif
  86. n=gi(),m=gi();
  87. int a,b,_t,_s;
  88. while(m--)a=gi(),b=gi(),_t=gi(),_s=gi(),G[a].push_back((edge){b,_t,_s});
  89. for(int i=1;i<n;++i)s[i]=i;
  90. solve(1,n-1,0,7777);
  91. for(int i=1;i<=n;++i)if(W[i]>7776)W[i]=1e9;
  92. int m1=gi(),n1=gi();
  93. for(int i=1;i<=n1;i+=2)link(S,i,W[i]);
  94. for(int i=2;i<=n1;i+=2)link(i,T,W[i]);
  95. while(m1--)a=gi(),b=gi(),link(a,b,1e9);
  96. double ans=0;while(BFS())memcpy(head,fir,sizeof fir),ans+=Dinic(S,1e9);
  97. if(ans>9e8)puts("-1");
  98. else printf("%.1lf\n",ans);
  99. return 0;
  100. }

洛咕 P2494 [SDOI2011]保密的更多相关文章

  1. 洛谷2494 [SDOI2011]保密 (分数规划+最小割)

    自闭一早上 分数规划竟然还能被卡精度 首先假设我们已经知道了到每个出入口的时间(代价) 那我们应该怎么算最小的和呢? 一个比较巧妙的想法是,由于题目规定的是二分图. 我们不妨通过最小割的形式. 表示这 ...

  2. 【BZOJ2285】[SDOI2011]保密(分数规划,网络流)

    [BZOJ2285][SDOI2011]保密(分数规划,网络流) 题面 BZOJ 洛谷 题解 首先先读懂题目到底在干什么. 发现要求的是一个比值的最小值,二分这个最小值\(k\),把边权转换成\(t- ...

  3. 洛咕3312 [SDOI2014]数表

    洛咕3312 [SDOI2014]数表 终于独立写出一道题了...真tm开心(还是先写完题解在写的) 先无视a的限制,设\(f[i]\)表示i的约数之和 不妨设\(n<m\) \(Ans=\su ...

  4. 洛咕 P3700 [CQOI2017]小Q的表格

    洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...

  5. 洛咕 P2336 [SCOI2012]喵星球上的点名

    洛咕 P2336 [SCOI2012]喵星球上的点名 先求出SA和height,一个点名串对应的就是一段区间,还有很多个点,就转化成了 有很多个区间,很多个点集,对每个区间计算和多少个点集有交,对每个 ...

  6. 洛咕 P4131 [WC2005]友好的生物

    洛咕 P4131 [WC2005]友好的生物 首先可以发现\(C\)是没有用的,可以乘进所有的权值里面做 考虑没有最后一维的限制,那么两个生物的友好值就是 \(\sum_{i=1}^k|a_i-b_i ...

  7. 洛咕 P4528 [CTSC2008]图腾

    洛咕 P4528 [CTSC2008]图腾 神题orz. 先约定abcd表示\(1\leq A<B<C<D\leq n\),而且\(y_a,y_b,y_c,y_d\)的排名正好是\( ...

  8. 洛咕P3250 [HNOI2016]网络 整体二分

    这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...

  9. 洛咕 P2480 [SDOI2010]古代猪文

    洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...

随机推荐

  1. Mosquitto安装调试实录

    1. 安装 以Centos 7.x为例,先安装依赖项(笔者使用阿里云资源,部分依赖项可能未列出): yum install gcc-c++ yum install openssl-devel yum ...

  2. Hadoop HBase概念学习系列之RowKey设计(二十九)

    HBase里的RowKey设计,分为随机查询的RowKey设计和连续查询的RowKey设计.

  3. 关于Oracle11g R2的学习笔记

    进来由于工作需要开始有SQLServer向Oracle转型学习,想把学习写到这里作为记录和备忘.  Oracle 11g R2下面都简称:Oracle     第一:Oracle的安装 在安装过程没有 ...

  4. 【译文】InnoDB 的不同的SQL如何加锁

    http://dev.mysql.com/doc/refman/5.6/en/innodb-locks-set.html 前置:检索如果用不到索引,会扫描全表,并根据策略加锁.所以,这就是我们合理建立 ...

  5. hadoop学习;hdfs操作;执行抛出权限异常: Permission denied;api查看源代码方法;源代码不停的向里循环;抽象类通过debug查找源代码

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010026901/article/details/26587251 eclipse快捷键alt+s ...

  6. JSF标签之f:facet 的用法

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zkn_CS_DN_2013/article/details/33717091 f:facet标签用来 ...

  7. BZOJ3270:博物馆(高斯消元)

    Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...

  8. 【洛谷】【堆】P1801 黑匣子_NOI导刊2010提高(06)

    [题目描述:] Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两 ...

  9. Vmware10组建局域网

    Vmware10组建局域网很简单,特别是用Ubuntu16.04作为操作系统,基本上按照如下步骤来,是不会出现问题的. 1.首先,启动虚拟机,选择“编辑”->“虚拟网络编辑器” 2.改为桥接模式 ...

  10. snapkit更新约束崩溃的问题

    最近在使用snapkit布局时,竟然发现更新约束会导致崩溃,为什么这样呢? checkButton.snp.makeConstraints { (make) in make.left.top.equa ...