博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2455 Secret Milking Machine
阅读量:4332 次
发布时间:2019-06-06

本文共 2646 字,大约阅读时间需要 8 分钟。

 

【题意】:(半天没懂题目什么意思,诶。。)FJ有N块地,这些地之间有P条双向路,每条路的都有固定的长度l。现在要你找出从第1块地到第n块地的T条不同路  

              径,每条路径上的路不能与先前的路径重复,问这些路径中的最长路的最小是多少。

【思路】二分判定最长路的最小值,再用小于这个值的边建图跑最大流。建图的话,整张无向图(记得是无向图! 对一条边正向方向都要添加wa 好久  )加一个源点和点1 连边容量无穷大,n点和会汇点连边,容量无穷大,最大流是多少能够找到的不同的路径就是多少。

 

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 struct E{
int from;int to;int c;int f;}; 8 vector
g[220]; 9 vector
edge; 10 int d[220],vis[220],cur[220],num[220],p[220]; 11 #define INF 10000000 12 13 struct node{ int v,w;}; 14 vector
mapp[220]; 15 int n,T; 16 17 void add(int from,int to,int c) 18 { 19 E temp1,temp2; 20 temp1.from =from; temp1.to=to; temp1.c=c;temp1.f=0; 21 temp2.from =to; temp2.to=from; temp2.c=0;temp2.f=0; 22 edge.push_back (temp1); 23 edge.push_back (temp2); 24 int m=edge.size (); 25 g[from].push_back (m-2); 26 g[to].push_back (m-1); 27 } 28 29 void bfs(int s,int t) 30 { 31 int i; 32 queue
q; 33 q.push (t); 34 d[t]=0; 35 memset(vis,0,sizeof(vis)); 36 vis[t]=1; 37 while(!q.empty ()) 38 { 39 int t=q.front ();q.pop (); 40 for(i=0;i
e.c-e.f) 61 a=e.c-e.f; 62 x=e.from; 63 } 64 x=t; 65 while(x!=s) 66 { 67 edge[p[x]].f+=a; 68 edge[p[x]^1].f-=a; 69 x=edge[p[x]].from ; 70 } 71 return a; 72 } 73 74 int maxflow(int s,int t,int n)// n: 包源点汇点的所有点数-1 75 { 76 int flow=0,i; 77 bfs(s,t); 78 memset(num,0,sizeof(num)); 79 memset(cur,0,sizeof(cur)); 80 for(i=0;i<=t;i++) 81 num[d[i]]++; 82 int x=s; 83 while(d[s]<=n) 84 { 85 if(x==t) 86 { 87 flow+=zg(s,t); 88 x=s; 89 //printf("flow %d\n",flow); 90 } 91 int ok=0; 92 for(i=cur[x];i
e.f&&d[x]==d[e.to]+1) 97 { 98 ok=1; 99 100 p[e.to]=g[x][i];101 102 cur[x]=i;103 x=e.to;//!@#$%^&104 break;105 }106 }107 if(ok==0)108 {109 int m=n;110 for(i=0;i
e.f&&m>d[e.to])115 m=d[e.to];116 }117 if(--num[d[x]]==0) break;118 num[d[x]=m+1]++;119 cur[x]=0;////!@#$%^^&120 if(x!=s)121 x=edge[p[x]].from ;122 123 }124 }125 return flow;126 }127 128 bool ok(int x)129 {130 edge.clear();131 for(int i=0;i<=n+1;i++)132 g[i].clear();133 add(0,1,INF);134 for(int i=1;i<=n;i++)135 for(int j=0;j
=T)147 return true;148 return false;149 }150 151 int solve(int maxe)152 {153 int left=0,right=maxe,ans=INF;154 while(left<=right)155 {156 int mid=(left+right)/2;157 if(ok(mid))158 {159 ans=min(ans,mid);160 right=mid-1;161 }162 else left=mid+1;163 }164 return ans;165 }166 167 int main()168 {169 int m,a,b,c;170 while(~scanf("%d%d%d",&n,&m,&T))171 {172 for(int i=0;i<=n;i++)173 mapp[i].clear();174 int maxe=0;175 for(int i=0;i

 

转载于:https://www.cnblogs.com/assult/p/3949536.html

你可能感兴趣的文章
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-01 什么是微服务的注册中心
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-07 Eureka服务注册中心配置控制台问题处理...
查看>>