Description

Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑、仰卧起坐等 等,不过到目前为止,他
坚持下来的只有晨跑。 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街道,Elaxia只能从 一
个十字路口跑向另外一个十字路口,街道之间只在十字路口处相交。Elaxia每天从寝室出发 跑到学校,保证寝室
编号为1,学校编号为N。 Elaxia的晨跑计划是按周期(包含若干天)进行的,由于他不喜欢走重复的路线,所以 
在一个周期内,每天的晨跑路线都不会相交(在十字路口处),寝室和学校不算十字路 口。Elaxia耐力不太好,
他希望在一个周期内跑的路程尽量短,但是又希望训练周期包含的天 数尽量长。 除了练空手道,Elaxia其他时间
都花在了学习和找MM上面,所有他想请你帮忙为他设计 一套满足他要求的晨跑计划。

Input

第一行:两个数N,M。表示十字路口数和街道数。 
接下来M行,每行3个数a,b,c,表示路口a和路口b之间有条长度为c的街道(单向)。
N ≤ 200,M ≤ 20000。

Output

两个数,第一个数为最长周期的天数,第二个数为满足最长天数的条件下最短的路程长 度。

Sample Input

7 10
1 2 1
1 3 1
2 4 1
3 4 1
4 5 1
4 6 1
2 5 5
3 6 6
5 7 1
6 7 1

Sample Output

2 11
 
拆点 费用流
  1. //Serene
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cstdlib>
  6. #include<cstdio>
  7. #include<cmath>
  8. using namespace std;
  9. const int maxn=400+10,maxm=8e4+10,INF=0x3f3f3f3f;
  10. int n,m,S,T;
  11.  
  12. int aa;char cc;
  13. int read() {
  14. aa=0;cc=getchar();
  15. while(cc<'0'||cc>'9') cc=getchar();
  16. while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
  17. return aa;
  18. }
  19.  
  20. struct Node{
  21. int x,y,cap,flow,w;
  22. Node(){}
  23. Node(int x,int y,int cap,int w):x(x),y(y),cap(cap),w(w){}
  24. }node[maxm];
  25.  
  26. int fir[maxn],nxt[2*maxm],e=1;
  27. void add(int x,int y,int z,int w) {
  28. node[++e]=Node(x,y,z,w); nxt[e]=fir[x];fir[x]=e;
  29. node[++e]=Node(y,x,0,-w); nxt[e]=fir[y];fir[y]=e;
  30. }
  31.  
  32. int from[maxn],zz[maxn],dis[maxn];
  33. bool vis[maxn];
  34. bool spfa() {
  35. int s=1,t=0,x,y,z;
  36. memset(dis,0x3f3f3f3f,sizeof(dis));
  37. memset(zz,0,sizeof(zz));
  38. zz[++t]=S;vis[S]=1;dis[S]=0;
  39. while(s<=t) {
  40. x=zz[s%maxn];
  41. for(y=fir[x];y;y=nxt[y]) {
  42. z=node[y].y;
  43. if(node[y].flow>=node[y].cap||dis[z]<=dis[x]+node[y].w) continue;
  44. dis[z]=dis[x]+node[y].w;from[z]=y;
  45. if(!vis[z]) {
  46. vis[z]=1; t++;
  47. zz[t%maxn]=z;
  48. }
  49. }
  50. s++;vis[x]=0;
  51. }
  52. return dis[T]!=INF;
  53. }
  54.  
  55. int now,rs1=0,rs2=0;
  56. int MCMF() {
  57. while(spfa()) {
  58. now=1; rs1++;
  59. for(int i=T;i!=S;i=node[from[i]].x) {
  60. node[from[i]].flow+=now;
  61. node[from[i]^1].flow-=now;
  62. rs2+=node[from[i]].w*now;
  63. }
  64. }
  65. return rs1;
  66. }
  67.  
  68. int main() {
  69. n=read();m=read();
  70. int x,y,z;S=n+1;T=n;
  71. for(int i=2;i<n;++i) add(i+n,i,1,0);
  72. add(1+n,1,INF,0);add(n+n,n,INF,0);
  73. for(int i=1;i<=m;++i) {
  74. x=read();y=read();z=read();
  75. add(x,y+n,1,z);
  76. }
  77. printf("%d ",MCMF()); printf("%d",rs2);
  78. return 0;
  79. }

  

bzoj1877 晨跑的更多相关文章

  1. BZOJ-1877 晨跑 最小费用最大流+拆点

    其实我是不想做这种水题的QWQ,没办法,剧情需要 1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1704 Solve ...

  2. bzoj1877 晨跑(费用流)

    1877: [SDOI2009]晨跑 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2138  Solved: 1145 Description Elax ...

  3. [SDOI2009][bzoj1877] 晨跑 [费用流]

    题面: 传送门 思路: 一个点只能走一回,路径不能相交...... 显然可以转化为网络流的决策来做 我们构建一个网络,令其最大流等于最大的跑步天数即可 怎么构造呢? 对于每个点只能走一次的限制,可以考 ...

  4. 【BZOJ1877】晨跑(费用流)

    [BZOJ1877]晨跑(费用流) 题面 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在 ...

  5. 【BZOJ1877】[SDOI2009]晨跑 最小费用最大流

    [BZOJ1877][SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现 ...

  6. bzoj1877: [SDOI2009]晨跑

    挺裸的最小费用最大流... #include<cstdio> #include<queue> #include<cstring> #include<iostr ...

  7. 【bzoj1877】[SDOI2009]晨跑 费用流

    题目描述 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街 ...

  8. BZOJ1877:[SDOI2009]晨跑——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1877 https://www.luogu.org/problemnew/show/P2153 Ela ...

  9. 【费用流】BZOJ1877[SDOI2009]-晨跑

    [题目大意] Elaxia每天从寝室出发跑到学校,保证寝室编号为1,学校编号为N. Elaxia的晨跑计划是按周期(包含若干天)进行的,由于他不喜欢走重复的路线,所以在一个周期内,每天的晨跑路线都不会 ...

随机推荐

  1. hashMap 源码解读理解实现原理和hash冲突

    hashMap 怎么说呢. 我的理解是 外表是一个set 数组,无序不重复 . 每个set元素是一个bean ,存着一对key value 看看代码吧 package test; import jav ...

  2. IO流18 --- RandomAccessFile实现数据的读写操作 --- 技术搬运工(尚硅谷)

    RandomAccessFile实例化时,需要设置读写模式 示例:复制文件 @Test public void test16() throws IOException { RandomAccessFi ...

  3. 设置div背景图片填满div

    可以设置div的样式为 background:url('+UPLOAD_PATH+data.url+') no-repeat; background-size: 100%;width:100%;hei ...

  4. hadoop2.2 window下报错的问题(winutils.exe)

    在windows下开发hadoop一直正常,但把hadoop集群升级到2.0版本以上,在eclipse下执行程序会报打不到winutils.exe的错误,这是因为hadoop2.2没有发布winuti ...

  5. Latex报错: Could not start the command: xelatex.exe -synctex=1 -interaction=nonstopmode?

    Latex报错: Could not start the command: xelatex.exe -synctex=1 -interaction=nonstopmode 网上还有很多说出Could ...

  6. Leetcode434.Number of Segments in a String字符串中的单词数

    统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my name is John" ...

  7. windows 和 mac 文件夹共享问题汇总

    目标:windows上的文件夹,共享给MAC,mac可以将文件复制到windows上来 windows设置共享文件夹,然后在mac上访问 假设win的ip地址是10.10.27.11,则mac上远程方 ...

  8. Java review-basic2

    1.Implement a thread-safe (blocking) queue: Class Producer implements Runable{ Private final Blockin ...

  9. Python当前进程信息 (os包)

    Python当前进程信息 (os包) 我们在Linux的概念与体系,多次提及进程的重要性.Python的os包中有查询和修改进程信息的函数.学习Python的这些工具也有助于理解Linux体系. (o ...

  10. http方式nginx 访问不带www的域名301重定向跳转到www的域名帮助seo集中权重

    比如我需要吧gucanhui.com重定向301跳转到www.gucanhui.com 需要在nginx的con发文件中加入一段 server { listen ; server_name gucan ...