uva 10099 The Tourist Guide nyoj 1019 亲戚来了【单个路线最大流【最短路算法】】
题目:uva 10099 The Tourist Guide
nyoj 1019 亲戚来了
题意:给出一个无向图,每条路有一个容量。从 s 到 t 的一条最大的流量。
分析:这个题目可以用最短路的算法来做,最短路是求从 s 到 t 的最短路,这里是求从 s 到 t 的最小容量。最短路的三种算法都可以。
nyoj的使我们比赛的题目,有坑,图有重边,要处理,还有s可能等于t。
spfa代码:
#include <cstdio>
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
#include <stack>
#include <vector>
#include <utility>
#include <cmath>
using namespace std;
const int N = 120;
const int inf = 0x3f3f3f3f;
struct Node
{int v,len;
};
vector<Node> v[N];
void add_Node(int x,int y,int z)
{v[x].push_back((Node){y,z});v[y].push_back((Node){x,z});
}
void v_clear(int n)
{for(int i=1;i<=n;i++)v[i].clear();
}
int dis[N];
void spfa(int s)
{memset(dis,inf,sizeof(dis));queue<int> q;q.push(s);while(!q.empty()){int tmp=q.front();q.pop();for(int i=0;i<v[tmp].size();i++){Node ff=v[tmp][i];int ans=min(dis[tmp],ff.len);//printf("--%d %d\n",ff.v,ans);if(dis[ff.v]!=inf){if(ans>dis[ff.v]) //注意只要更新了都要压入q.push(ff.v);dis[ff.v]=max(dis[ff.v],ans);}elseq.push(ff.v),dis[ff.v]=ans;}}
}
int main()
{int n,m,cas=1;while(~scanf("%d%d",&n,&m)){if(n==0 && m==0)break;for(int i=0; i<m; ++i){int a,b,c;scanf("%d%d%d",&a,&b,&c);add_Node(a,b,c);}int s,t,num;scanf("%d%d%d",&s,&t,&num);spfa(s);//printf("%d\n",dis[t]);if(dis[t]>=inf)printf("-1\n");else{dis[t]--;printf("Scenario #%d\n",cas++);printf("Minimum Number of Trips = %d\n\n",(num+dis[t]-1)/dis[t]);}v_clear(n);}return 0;
}
nyoj floyd 代码:
#include <cstdio>
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
#include <stack>
#include <vector>
#include <utility>
#include <cmath>
using namespace std;
const int N = 120;
const int inf = 0x3f3f3f3f;
int mp[N][N];
int main()
{int n,m,cas=1;while(~scanf("%d%d",&n,&m)){memset(mp,inf,sizeof(mp));for(int i=1;i<=n;i++)mp[i][i]=0;for(int i=0; i<m; ++i){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(mp[a][b]!=inf)mp[a][b]=mp[b][a]=max(mp[a][b],c);elsemp[a][b]=mp[b][a]=c;}int s,t,num;scanf("%d%d%d",&s,&t,&num);for(int k=1; k<=n; ++k) //floydfor(int i=1; i<=n; ++i){for(int j=1; j<=n; ++j){int tmp = min(mp[i][k], mp[k][j]);if(mp[i][j]==inf) mp[i][j] = tmp;else mp[i][j] = max(mp[i][j],tmp);}}if(s==t)puts("0");else if(mp[s][t]>=inf)printf("-1\n");else{mp[s][t]--;printf("%d\n",(num+mp[s][t]-1)/mp[s][t]);}}return 0;
}
nyoj dij代码:
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;
const int N = 120;
const int inf = 0x3f3f3f3f;
int map[N][N];
int n,m;
int dij(int s,int t)
{int vis[N],dis[N];memset(vis,0,sizeof(vis));memset(dis,-1,sizeof(dis));dis[s]=inf;//vis[t]=1;int tmp=s;while(1){vis[tmp]=1;for(int i=1;i<=n;i++){if(map[tmp][i]>0){if(map[tmp][i]>dis[i]){dis[i]=min(dis[tmp],map[tmp][i]);}}}int max=-1;for(int i=1;i<=n;i++){if(vis[i]==0 && dis[i]>max){max=dis[i];tmp=i;}}
// printf("--%d\n",tmp);if(max==-1)return dis[t];}
}
int main()
{while(~scanf("%d%d",&n,&m)){memset(map,0,sizeof(map));for(int i=0;i<m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);map[x][y]=max(map[x][y],z);map[y][x]=map[x][y];}int x,y,z;scanf("%d%d%d",&x,&y,&z);int flow=dij(x,y);
// printf("%d\n",flow);if(x==y){printf("0\n");continue;}if(flow==-1){printf("-1\n");continue;}int ans=(z-2)/(flow-1)+1; ///ans=(z-1)/(flow-1);
// if((z-1)%(flow-1)!=0 && (z-1)%(flow-1)!=1)
// ans++;printf("%d\n",ans);}return 0;
}
uva 10099 The Tourist Guide nyoj 1019 亲戚来了【单个路线最大流【最短路算法】】相关推荐
- uva 10099 The Tourist Guide
DP(仿照Floyd) uva 10048 Audiophobia 一样的题目啊 这次是要找s到t的所有路径中,最小边的最大值,还是仿照Floyd,不过状态转移方程改一下,而且建图初始化也改一下就可 ...
- uva 10099 The Tourist Guide(单源最短路/spfa/dijkstra)
题目: 链接:点击打开链接 题意: 思路: 代码: #include <iostream> #include <cstring> #include <cstdio> ...
- 10099 The Tourist Guide
题意:给出n的城市m条通道,然后每条通道最大的承载人数给出来了,然后给出起点和终点以及要搭载的人数,问最少要走多少次才能把全部游客送到目的地 因为导游每次都要跟团,所以每条交通道路搭载的最大人数要减1 ...
- sicily题目分类
sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...
- [sicily]部分题目分类
sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...
- Sicily 题目分类
依照自己水平挑着做→ →~~ 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 ...
- 编程题目分类(剪辑)
1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代 ...
- π-Algorithmist分类题目(3)
原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(3) Probability ...
- π-Algorithmist分类题目(2)
原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(2) Set Theory U ...
- UVa Online Judge 工具網站
UVa Online Judge 工具網站 转自http://www.csie.ntnu.edu.tw/~u91029/uva.html Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 M ...
最新文章
- 3.7.1 读取输入
- redis存10万条数据_redis详细介绍
- promise间隔时间添加dom
- java并发编程之美-阅读记录4
- 新手入门教程-------Spring Boot中集成RabbitMQ
- 三星在美最高法院吐苦水,苹果设计专利索赔太多
- html2canvas关于图片不能正常截取 1
- 彩虹易支付源码v8.1.1-支持多通道轮训/API退款/实名认证/完善手动提现t0t1
- 甘肃暴雨强度公式_我国若干城暴雨强度公式列表.doc
- 批量修改文件夹内文件格式
- Microsoft Office XP 智能标记的安装和安全性
- 在VS中一个项目下两个以上源文件怎么通过编译
- wordpress mysql缓存_【新功能】wordpress数据库缓存功能介绍和教程
- Win7系统安装Pycharm专业版
- 技术分享:逆向破解华为路由器第三部分
- java将图片的url转换成File,File转换成二进制流byte
- java2 day03 XML DOM4J
- 2019ICPC上海网络赛A 边分治+线段树
- 安信可1.5---编译下载乐鑫ESP8266 RTOS SDK库
- [论文阅读] (14)英文论文实验评估(Evaluation)如何撰写及精句摘抄(上)——以入侵检测系统(IDS)为例
热门文章
- k8s不适合mysql_K8S 配置mysql配置文件不生效问题处理
- 控制器c语言编程,如何用C语言对DMA控制器编程 - 全文
- windwos上外网
- Python安装word2vec环境依赖
- 【北亚数据恢复】MSSQL 2000 出现“823”报错信息的数据恢复案例
- 负载均衡(Load Balance)
- python拟合曲线_用python做曲线拟合
- 【BZOJ4200】【LOJ2134】【NOI2015】小园丁与老司机(DP,有源汇上下界最小流)
- RHCE-ansible第三次实验,通过ansible自动化部署web服务
- flutter之从零开始搭建(三)之 网络请求