ccf 201503-5 最小花费 这题交上去只有10分嗨!求大佬的题解啊
然而,小R不希望在旅行中为了购买较低价的粮食而绕远路,因此他总会选择最近的路走。现在,请你计算小R规划的每条旅行路线的最小花费是多少。
第二行包含n个整数。第i个整数wi表示城市i的食物价格。
接下来n-1行,每行包括3个整数u, v, e,表示城市u和城市v之间有一条长为e的双向道路。
接下来m行,每行包含2个整数si和ti,分别表示一条旅行路线的起点和终点。
1 7 3 2 5 6
1 2 4
1 3 5
2 4 1
3 5 2
3 6 1
2 5
4 6
6 4
5 6
16
26
13
前30%的评测用例满足:n, m ≤ 200;
另有40%的评测用例满足:一个城市至多与其它两个城市相连。
所有评测用例都满足:1 ≤ n, m ≤ 105,1 ≤ wi ≤ 106,1 ≤ e ≤ 10000。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<pair<int,int> > ss[100000+1];
int cost[100000+1];
int visited[100000+1];
ll c,mc,ml,l;
int t;
void dfs(int m,int n)
{
if(m==n)
{
mc=min(c,mc);
return;
}
for(int i=0;i<ss[m].size();i++)
{
int a=ss[m][i].first,b=ss[m][i].second;
if(!visited[a])
{
if(c+b*t>mc)continue;
if(l+b>ml)continue;
int fc=c,fl=l,ft=t;
visited[a]=1;c+=b*t;
l+=b;t=min(t,cost[a]);
dfs(a,n);
visited[a]=0;c=fc;l=fl;t=ft;
}
}
}
int main()
{
int n,m;cin>>n>>m;
for(int i=1;i<n+1;i++)
{
cin>>cost[i];
}
for(int i=1;i<n;i++)
{
int u,v,e;cin>>u>>v>>e;
ss[u].push_back(make_pair(v,e));
ss[v].push_back(make_pair(u,e));
}
while(m--)
{
int start,en;cin>>start>>en;
int d[n+1];memset(d,127,sizeof(d));
int vis[n+1]={0};
priority_queue<pair<int,int> > s;
while(!s.empty())s.pop();
s.push(make_pair(0,start));
while(!s.empty())
{
int v=s.top().second;s.pop();
if(v==en)break;
if(vis[v])continue;
vis[v]=1;
for(int i=0;i<ss[v].size();i++)
{
int node=ss[v][i].first,len=ss[v][i].second;
if(!vis[node])
{
if(len+d[v]<d[node])
{
d[node]=len+d[v];
s.push(make_pair(-d[node],node));
}
}
}
}
ml=d[en];c=0;
mc=ml*cost[start];
memset(visited,0,sizeof(visited));
l=0;t=cost[start];
visited[start]=1;
dfs(start,en);
cout<<mc<<endl;
}
return 0;
}

ccf 201503-5 最小花费 这题交上去只有10分嗨!求大佬的题解啊的更多相关文章
- 把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend
//把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend //dp[i][j]:把第i个数转成第j小的数,最小花费 //此题与po ...
- 第四届CCF软件能力认证(CSP2015) 第五题(最小花费)题解
[问题描述] C国共有$n$个城市.有$n-1$条双向道路,每条道路连接两个城市,任意两个城市之间能互相到达.小R来到C国旅行,他共规划了$m$条旅行的路线, 第$i$条旅行路线的起点是$s_i$,终 ...
- [LeetCode] Minimum Cost to Merge Stones 混合石子的最小花费
There are N piles of stones arranged in a row. The i-th pile has stones[i] stones. A move consists ...
- pta7-20 畅通工程之局部最小花费问题(Kruskal算法)
题目链接:https://pintia.cn/problem-sets/15/problems/897 题意:给出n个城镇,然后给出n×(n-1)/2条边,即每两个城镇之间的边,包含起始点,终点,修建 ...
- POJ 3171.Cleaning Shifts-区间覆盖最小花费-dp+线段树优化(单点更新、区间查询最值)
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4721 Accepted: 1593 D ...
- Codeforces Round #466 (Div. 2) B. Our Tanya is Crying Out Loud[将n变为1,有两种方式,求最小花费/贪心]
B. Our Tanya is Crying Out Loud time limit per test 1 second memory limit per test 256 megabytes inp ...
- 九度OJ 1086:最小花费 (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3960 解决:819 题目描述: 在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对应关系如下 ...
- 【uva 1515】Pool construction(图论--网络流最小割 模型题)
题意:有一个水塘,要求把它用围栏围起来,每个费用为b.其中,(#)代表草,(.)代表洞,把一个草变成洞需要费用d, 把一个洞变成草需要费用f.请输出合法方案中的最小费用. 解法:(不好理解...... ...
- ZOJ3715 竞选班长求最小花费
题意: 有n个小朋友竞选班长,一号想当班长,每个人都必须选择一个人当班长,并且不可以选择自己,并且每个人都有一个权值ai,这个权值就是如果1想让这个人改变主意选择自己当班长就得给他ai个糖 ...
随机推荐
- DES加密算法应用:分组加密模式
通常,大多数的分组加密算法都是把数据按照64位分组的方式进行加密和解密.但是几乎所有的加密工作所涉及的数据量都远远大于64位,因此就需要不断地重复加密过程,直到处理完所有的分组.这种分组加密中所涉及的 ...
- python一直放弃到双数的day10
今天接着来说那个新的大知识点,函数,函数中是可以传递一个数值的,这个数值简称为参数,对于参数,他可以是任意个数和任意类型(数据类型).参数的其中一种有位置传参,函数中的参数有几个,那么就要传入几个,传 ...
- 逆向-攻防世界-CSAW2013Reversing2
运行程序乱码,OD载入搜索字符串,断电到弹窗Flag附近. 发现跳过00B61000函数,弹窗乱码,我们试试调用00B61000函数.将00B61094的指令修改为JE SHORT 00B6109b. ...
- vue 绑定样式的几种方式
vue 绑定样式 对象语法 1.v-bind:class设置一个对象,动态切换class <div :class="{'active':isActive}">xxx&l ...
- scala的多种集合的使用(4)之列表List(ListBuffer)的操作
1.List列表的创建和添加元素 1)最常见的创建list的方式之一. scala> val list = 1 :: 2 :: 3 :: Nil list: List[Int] = List(1 ...
- Oracle timestamp类型转换成date类型
今天需要根据时间判断,统一修改某一个字段的数据.然后打开数据库发现,时间类型为timestamp类型.如下: 然后呢,这对我不是喝口水就可以解决的问题吗? 解决方案如下:我需要改这张表某个字段的内容, ...
- 3 Eclipse 查看不了源码
Eclipse 查看源码时,报source not found问题,经查资料,需要配置环境变量才能查看到. 在用户变量或者系统变量下,配置CLASSPATH,值为JDK的lib路径:D:\Progra ...
- open live writer 测试
什么是Hash表 1.定义 Hash(散列/哈希),就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散 ...
- 利用控制台承载SignalR作为服务端、及第三方推送信息
一 首先建立一个控制台需要引用一些组件 特别要注意引用Microsoft.Owin.Host.HttpListener别忘了这个组件,不引用他可能程序正常运行不会报错,但服务器一直开启失败(我之前就是 ...
- bugku 逆向 love
可以看到将输入先经过 sub_4110BE 这个函数进行加密 然后每一位加上下标本身 再和str2比较 正确就是right 点开加密函数: 关键语句就在这里 我们可以看到是算输入的字符按三个一组能分为 ...