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个糖 ...
随机推荐
- vue踩坑记录:[Vue warn]: $attrs is readonly.
今天在用element-ui的DatePicker日期选择器的时候,发现每当点击一次这个组件,控制台就会报警告`[Vue warn]: $attrs is readonly`,但是也不影响实际操作效果 ...
- [认证授权] 2.OAuth2授权(续) & JWT(JSON Web Token)
1 RFC6749还有哪些可以完善的? 1.1 撤销Token 在上篇[认证授权] 1.OAuth2授权中介绍到了OAuth2可以帮我们解决第三方Client访问受保护资源的问题,但是只提供了如何获得 ...
- 利用Python爬取网页图片
最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片 ...
- facebook marketing(市场营销) API(3)
如果你只想管理广告,而不想管理BM,那就需要市场营销API了. 相关文章 通过BM api管理完相互授权后,就可以让自己的运营参与进行投放了(市场营销API也支持非BM操作,即广告主自己操作). 市场 ...
- Scrum Meeting 博客
笨拙软件工程 Scrum Meeting 博客汇总 一.Alpha阶段 [alpha阶段]第一次Scrum Meeting [alpha阶段]第二次Scrum Meeting [alpha阶段]第三次 ...
- 增强for
什么是增强for? 增强for(也称之为for each)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的.他的内部原理其实是一个Iterator迭代器,所以在遍历过程中不能对集合 ...
- git 拉取远程分支到本地
步骤: 1.新建一个空文件,文件名为hhhh 2.初始化 git init 3.自己要与origin master建立连接(下划线为远程仓库链接) git remote add origin git@ ...
- [安全转帖]浅析安全威胁情报共享框架OpenIOC
浅析安全威胁情报共享框架OpenIOC https://www.freebuf.com/sectool/86580.html Indicator of compromise Outline: 1. I ...
- spring多模块项目手动整合
一.分别创建parent entity dao service controller web等模块项目,如图: 二.parent项目添加依赖 <!-- 集中定义依赖版本号 --> < ...
- git常用命令一、git cherry-pick
在自己的分支查看想要合并的节点的commit id : Git log —oneline -3 //查看最新的三个提交 commit id 切换到总分支: Git fetch Git pull G ...