noip第26课作业
1. 信使
【问题描述】
战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。指挥部设在第一个哨所。当指挥部下达一个命令后,指挥部就派出若干个信使向与指挥部相连的哨所送信。当一个哨所接到信后,这个哨所内的信使们也以同样的方式向其他哨所送信。直至所有n个哨所全部接到命令后,送信才算成功。因为准备充足,每个哨所内都安排了足够的信使(如果一个哨所与其他k个哨所有通信联系的话,这个哨所内至少会配备k个信使)。
现在总指挥请你编一个程序,计算出完成整个送信过程最短需要多少时间。
【输入格式】
输入第1行有两个整数n和m,中间用1个空格隔开,分别表示有n个哨所和m条通信线路。1<=n,m<=100。第2至m+1行:每行三个整数i、j、k,中间用1个空格隔开,表示第i个和第j个哨所之间存在通信线路,且这条线路要花费k天。
【输出格式】
输出仅一个整数,表示完成整个送信过程的最短时间。如果不是所有的哨所都能收到信,就输出-1。
【样例输入】
4 4
1 2 4
2 3 7
2 4 1
3 4 6
【样例输出】
11
#include <iostream>
using namespace std;
int n,m;
int e[][],Max = -;;
int inf = ;
void floyed(){
for(int p = ;p <= n;p++ ){
for(int i = ;i <= n;i++){
for(int j = ;j <= n;j++){
if(e[i][j] > e[i][p] + e[p][j] ){
e[i][j] = e[i][p] + e[p][j];
}
}
}
}
for(int i = ;i <= n;i++){
if(e[][i] == ){
cout << -;
return;
}
if(e[][i] > Max){
Max = e[][i];
}
}
return;
}
int main(){
//输入
cin >> n >> m;
int a,b,k;
//初始化e数组
for(int i = ;i <=n;i++){
for(int j = ;j <= n;j++){
if(i == j) {
e[i][j] = ;
} else {
e[i][j] = inf;
}
}
}
for(int i = ;i <= m;i++){
cin >> a >> b >>k;
e[a][b] = k;
e[b][a] = k;
}
floyed();
cout << Max << endl;
return ;
}
2. 最小花费
【问题描述】
在n个人中,某些人的银行账号之间客户已互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元?
【输入格式】第一行输入两个正整数n、m,分别表示总人数和可以互相转账的人的对数。以下m行每行输入三个正整数x、y、z,表示标号为x的人和标号为y的人之间互相转账需要扣除z%的手续费(z<100)。
【输出格式】输出A使得B到账100元最少需要的总费用。精确到小数点后8位。
【样例输入】
3 3
1 2 1
2 3 2
1 3 3
1 3
【样例输出】
103.07153164
【数据范围】1<=n<=2000
#include <iostream>
#include <iomanip>
using namespace std;
double e[][],dis[] = {},minn;
int main() {
int n ,m,x,y,z,a,b,u; double inf = ;
cin >> n >> m;
for(int i = ; i <=n; i++) {
for(int j = ; j <= n; j++) {
if(i == j) {
e[i][j] = ;
} else {
e[i][j] = inf;
}
}
} for(int i = ; i <=m; i++) {
cin >>x >> y >> z;
e[x][y] = e[y][x] = -(double)z/; //x(1-z%)=100
}
cin >> a >>b;
int book[] = {};
book[a] = ; for(int i = ; i <=n; i++) {
dis[i] = e[a][i];
} for(int i = ; i <=n-; i++) {
minn = ;
for(int j = ; j <=n; j++) {
if(book[j] == && dis[j] > minn) {
minn = dis[j];
u = j;
}
}
book[u] = ;
for(int v = ; v <= n; v++) {
if(e[u][v] < inf) {
if(book[v] == && dis[v] < dis[u] * e[u][v]) {
dis[v] = dis[u] * e[u][v];
}
}
}
} cout << fixed << setprecision() << /dis[b] << endl;
return ;
}
1. 最优乘车
【问题描述】
H城是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路。每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园。
现在用整数1,2,…N 给H城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号为1,S公园巴士站的编号为N。
写一个程序,帮助这名旅客寻找一个最优乘车方案,使他在从饭店乘车到S公园的过程中换车的次数最少。
【输入】输入的第一行有两个数字M和N(1<=M<=100,1<N<=500),表示开通了M条单程巴士线路,总共有N个车站。从第二行到第M行依次给出了第1条到第M条巴士线路的信息。其中第i+1行给出的是第i条巴士线路的信息,从左至右按运行顺序依次给出了该线路上的所有站号,相邻两个站号之间用一个空格隔开。
【输出】输出只有一行。如果无法乘巴士从饭店到达S公园,则输出"N0",否则输出你的程序所找到的最少换车次数,换车次数为0表示不需换车即可到达。
【样例输入】
3 7
6 7
4 7 3 6
2 1 3 5
【样例输出】
2
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,i,j,k,s,ans;
int dis[][],a[];
char c;
int inf = ;
int main() {
cin >> m>>n;
for (i=; i<=n; i++) {
for (j=; j<=n; j++) {
if(i == j) {
dis[i][j] = ;
} else {
dis[i][j]=inf;
}
}
}
for (i=; i<=m; i++) {
s=;
c=;
while (c!=) {
s++;
cin>>a[s];
scanf("%c",&c);
}
for (j=; j<=s-; j++) {
for (k=j+; k<=s; k++) {
dis[a[j]][a[k]]=;
}
}
}
for (k=; k<=n; k++) {
for (i=; i<=n; i++) {
for (j=; j<=n; j++) {
if (dis[i][j]>dis[i][k]+dis[k][j]) {
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
if (dis[][n]==inf) {
cout <<"NO";
return ;
}
ans=dis[][n]-;
cout << ans;
return ;
}
noip第26课作业的更多相关文章
- noip第5课作业
1. 计算税收 [问题描述] 对某产品征收税金,在产值1万元以上收税5%:在1万元以下但在5000元或者以上的征收税3%:在5000元以下但在1000元或以上征收税2%:1000元以下的免收税 ...
- noip第26课资料
- noip第34课作业
1. 信息加密 [问题描述] 在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去.有一种加密规则是这样的:1. 对于字母字符,将其转换成其后的第3个字母.例如:A→D,a→ ...
- noip第33课作业
1. 排座椅 [问题描述] 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同 ...
- noip第29课作业
1. 钢条切割 [问题描述] 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi.那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大. ...
- noip第28课作业
分段数列 [问题描述] 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入格式: 输入第1行包含两个正整 ...
- noip第27课作业
1. 繁忙的都市 [问题描述] 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个 ...
- noip第25课作业
1. 求一个有向图所有顶点入度的和 输入有向图的顶点个数,边数以及各顶点之间的关联情况,要求求出这个有向图的所有顶点入度的总和. [输入格式] 第1行:2个空格分开的整数n(2<=n< ...
- noip第24课作业
1. 马走日 [问题描述] 马在中国象棋以日子形规则移动.请编写一段程序给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. ...
随机推荐
- 10.31JS日记
this问题 (1)this是js的一个关键字,指定一个对象,然后替代this: 函数中的this指向行为发生的主体,函数外的this都指向window,没有意义 (2)函数内的this跟函数在什么环 ...
- UI设计教程分享:6个不能错过的UI设计网站
Ui设计学习的人越来越多了,想要找到合适的学习资料很难,很多才接触ui设计且没有基础的同学也不知道去哪里找学习资料,虽然现在百度上很容易搜到ui设计的学习资料,但是一看不难发现,很多都是过时的学习资料 ...
- vue 获取跳转上一页组件信息
项目中有一需求,需要根据不同的页面路径url跳转进行不同的操作,首先需要获得上一页面的url,利用 beforeRouteEnter 这个钩子中的from参数获得之前url的信息,然后给 next 传 ...
- ajax post 请求 ,java端使用 request.getParameter 获取不到数据问题
js端 $.ajax({ type:'POST', data:{a:1}, url:_this.apiUrl+url, dataType:'json',//使用jsonp方式请求 contentTyp ...
- 字符串匹配 - sunday算法
常见的字符串匹配算法有BF.KMP(教科书中非常经典的).BM.Sunday算法 这里主要想介绍下性能比较好并且实现比较简单的Sunday算法 . 基本原理: 从前往后匹配,如果遇到不匹配情况判断母串 ...
- hehe,网易邮箱已经流氓到这个地步了
网易邮箱现在感觉作死,申请个邮箱还要下载你的APP,好,你牛逼,再见. 这是态度的问题. 最近丢了5亿的用户信息死不承认,撞库能把密保问题给撞出来? 如果真是撞库的话,丁三石养猪也已经感染口蹄疫了吧.
- python+selenium环境配置及浏览器调用
最近在学习python自动化,从项目角度和技术基础角度出发,我选择了python+selenium+appium的模式开始我的自动化测试之旅: 一.python安装 二.python IDE使用简介 ...
- python3版本main.py执行产生中间__pycache__详解
__pycache__ 用python编写好一个工程,在第一次运行后,总会发现工程根目录下生成了一个__pycache__文件夹,里面是和py文件同名的各种 *.pyc 或者 *.pyo 文件. 先大 ...
- 扩展方法(深入理解c#)
1. 静态类到扩展方法: 许多方法可能都适合转为扩展方法,只要具有以下特征: 1)你想为一个类型添加一些成员: 2)你不需要为类型的实例添加更多的数据: 3)你不能改变类型本身,因为是别人的代码 2. ...
- 纯css实现网络图标
<html> <head> <title>css图标</title> <meta charset="utf-8"> &l ...