我们枚举每一条边的流量x,将它作为底流(也就是比它大的的流量变成差值,比它小的流量为0),然后我们设x就是路径上第K大的那个边的流量。然后跑最短路,加上dis[n]就是当前的答案。然后取min即可。

算法时间复杂度\(O(n^2logn)\)

为什么这样子就是最小的呢?????我也很懵逼啊

因为你考虑ans_x是第K大的流量,设当前处理的为x。

如果按照上述规定来跑最短路,显然上述所求最短路加上K*ans_x就是答案,而且这个最短路径是一定确定的。下面我们就要求ans_x——如果我们进行遍历然后取min的话,如果保证x!=ans_x的时候不优呢?

如果x比ans_x小,那么“还有流量”的边一定大于等于K。这样的话最后统计答案最短路会长,x变小——但是变化幅度没有前面的大,所以不优。

如果x比ans_x大,那么“还有流量”的边一定小于等于K。这样的话最后统计答案最短路会短,x变大——但是变化幅度比前面的大,所以不优。

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#define MAXN 5010
using namespace std;
int n,m,t,k;
int head[MAXN],done[MAXN];
long long ans=(long long)1e15;
long long dis[MAXN];
vector<int>vec;
struct Edge{int nxt,to,dis;}edge[MAXN<<1];
struct Node
{
int u;
long long w;
friend bool operator < (struct Node x,struct Node y)
{return x.w>y.w;}
};
inline void add(int from,int to,int dis)
{
edge[++t].nxt=head[from];
edge[t].to=to;
edge[t].dis=dis;
head[from]=t;
}
inline long long dij(int x)
{
priority_queue<Node>q;
for(int i=0;i<=n;i++) dis[i]=(long long)1e15,done[i]=0;
q.push((Node){1,0}); dis[1]=0;
while(!q.empty())
{
int u=q.top().u; q.pop();
if(done[u]) continue;
done[u]=1;
for(int i=head[u];i;i=edge[i].nxt)
{
int v=edge[i].to;
long long w=max(edge[i].dis-x,0);
//printf("v=%d w=%lld %lld\n",v,w,edge[i].dis);
if(dis[u]+w<dis[v])
dis[v]=dis[u]+w,q.push((Node){v,dis[v]});
}
}
return dis[n];
}
int main()
{
//freopen("skd.in","r",stdin);
//freopen("skd.out","w",stdout);
freopen("ce.in","r",stdin);
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w),add(v,u,w);
vec.push_back(w);
}
ans=dij(0);
printf("%lld\n",ans);
for(int i=0;i<vec.size();i++)
ans=min(ans,1ll*vec[i]*k+dij(vec[i])),printf("%lld\n",ans);
printf("%lld\n",ans);
return 0;
}

赛肯德 | 2017NEERC某题的更多相关文章

  1. Kendall Rank(肯德尔等级)相关系数

    1.简介在统计学中,肯德尔相关系数是以Maurice Kendall命名的,并经常用希腊字母τ(tau)表示其值.肯德尔相关系数是一个用来测量两个随机变量相关性的统计值.一个肯德尔检验是一个无参数假设 ...

  2. Kendall's tau-b(肯德尔)等级相关系数

    Kendall's tau-b(肯德尔)等级相关系数:用于反映分类变量相关性的指标,适用于两个分类变量均为有序分类的情况.对相关的有序变量进行非参数相关检验:取值范围在-1-1之间,此检验适合于正方形 ...

  3. 团体程序设计天梯赛-练习集L1-014. 简单题

    L1-014. 简单题 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 这次真的没骗你 —— 这道超级简单的题目没有任何输入. ...

  4. 省选训练赛第4场D题(多米诺骨牌)

    题目来自FZU2163 多米诺骨牌 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description Vasya很喜欢排多米诺 ...

  5. 2019浙大校赛--G--Postman(简单思维题)

    一个思维水题 题目大意为,一个邮递员要投递N封信,一次从邮局来回只能投递K封.求最短的投递总距离.需注意,最后一次投递后无需返回邮局. 本题思路要点: 1.最后一次投递无需返回邮局,故最后一次投递所行 ...

  6. hash(2018年CSUST省赛选拔赛第一场B题+hash+字典树)

    题目链接:http://csustacm.com:4803/problem/1006 题目: 思路:正如题目一样,本题是一个hash,比赛的时候用的字典树,但是不知道为什么一直RE(听学长说要动态开点 ...

  7. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

  8. 第七届蓝桥杯省赛javaB组 第七题剪邮票

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...

  9. 2019浙大校赛--E--Potion(签到水题)

    一丢丢思维就ok 题目大意: 魔法师要煮药,有n个等级的药,所需要的药物为a1,a2...an,意为第n级需要多少药物,下一行为库存的不同等级药物,药物可降级使用不可升级. 思路:从高级药物开始解,把 ...

随机推荐

  1. leetcode257

    /** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...

  2. javascript常用验证大全

    1. 长度限制 <script> function test() { if(document.a.b.value.length>50) { alert("不能超过50个字符 ...

  3. JDK8新特性:函数式接口@FunctionalInterface的使用说明

    我们常用的一些接口Callable.Runnable.Comparator等在JDK8中都添加了@FunctionalInterface注解. 通过JDK8源码javadoc,可以知道这个注解有以下特 ...

  4. filebeat 笔记

    认识Beats Beats是用于单用途数据托运人的平台.它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch. (画外音:通俗地理解,就是采集数据 ...

  5. 46. Permutations (Back-Track,Sort)

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  6. JAVA - 守护线程(Daemon Thread)

    转载自:http://www.cnblogs.com/luochengor/archive/2011/08/11/2134818.html 在Java中有两类线程:用户线程 (User Thread) ...

  7. Linux下Thunderbird要安装的插件

    网络时代,总少不了跟邮件打交道,日常生活使用时多数是直接用网页版邮箱,在职场中一般要求用邮件客户端.使用Windows的朋友一般要么用Outlook,要么用Foxmail,其实,我们还有一个很不错的选 ...

  8. R学习笔记-安装R和RStudio,注意RStudio的版本需要与操作系统版本匹配

    1.安装步骤:先安装R,再安装RStudio RStudio是R的集成开发工具,本身不带R环境. 2.从当前R的官网和RStudio下载的R和RStudio的版本分别为: A .For Windows ...

  9. Associate File Type with Qt In Mac Os and Win

    Win Registry Question One day, my boss want me to finish one function which let the users can double ...

  10. MinDos--操作系统

    MinDos--操作系统 总结 : 本次实现的是功能是为 (1)自行定义系统提示符 (2)自定义命令集(8-10个) (3)用户输入HELP以查找命令的帮助 (4)列出命令的功能,区分内部还是外部命令 ...