codeforces#1196F. K-th Path(最短路,思维题)
题目链接:
https://codeforces.com/contest/1196/problem/F
题意:
在无向图的所有最短路点对中,求出第$k$大
数据范围:
$ 1 \leq k \leq 400$
分析:
其实只需要保留$k$条边,这样已经有了$k$个点对的距离小于排好序后第$k$条边的距离
再调用弗洛伊德算法$O(k^3)$
ac代码:
#include<bits/stdc++.h>
#define ll long long
#define PI acos(-1.0)
#define pa pair<int,char>
using namespace std;
const int maxn=200+10;
const int maxm=5e4+10;
const ll mod=1e9+7;
struct Edge
{
int a,b,g,s;
bool operator<(Edge & z)const
{
if(z.g==g)return s<z.s;
return g<z.g;
}
}edge[maxm];
Edge now[maxn];
ll G,S,ans=2e18;
int boss[maxn],top,n,m;
int fin(int x)
{
if(boss[x]==x)return x;
return boss[x]=fin(boss[x]);
}
void uni(int a,int b)
{
boss[fin(a)]=fin(b);
}
int main()
{
scanf("%d %d",&n,&m);
scanf("%lld %lld",&G,&S);
for(int i=1;i<=m;i++)
scanf("%d %d %d %d",&edge[i].a,&edge[i].b,&edge[i].g,&edge[i].s);
sort(edge+1,edge+1+m);
for(int i=1;i<=m;i++)
{
int cnt=0;
now[++top]=edge[i];
for(int j=top;j>=2;j--)if(now[j].s<now[j-1].s)swap(now[j],now[j-1]);
for(int j=1;j<=n;j++)boss[j]=j;
for(int j=1;j<=top;j++)
{
Edge zz=now[j];
if(fin(zz.a)==fin(zz.b))continue;
now[++cnt]=zz;
uni(zz.a,zz.b);
}
top=cnt;
if(cnt==n-1)ans=min(ans,edge[i].g*G+now[top].s*S);
//cout<<edge[i].g<<" "<<now[top].s<<endl;
}
if(ans==2e18)printf("-1\n");
else printf("%lld\n",ans);
return 0;
}
codeforces#1196F. K-th Path(最短路,思维题)的更多相关文章
- Codeforces 878D - Magic Breeding(bitset,思维题)
题面传送门 很容易发现一件事情,那就是数组的每一位都是独立的,但由于这题数组长度 \(n\) 很大,我们不能每次修改都枚举每一位更新其对答案的贡献,这样复杂度必炸无疑.但是这题有个显然的突破口,那就是 ...
- Educational Codeforces Round 5 E. Sum of Remainders (思维题)
题目链接:http://codeforces.com/problemset/problem/616/E 题意很简单就不说了. 因为n % x = n - n / x * x 所以答案就等于 n * m ...
- Codeforces 789A Anastasia and pebbles(数学,思维题)
A. Anastasia and pebbles time limit per test:1 second memory limit per test:256 megabytes input:stan ...
- Codeforces 752C - Santa Claus and Robot - [简单思维题]
题目链接:http://codeforces.com/problemset/problem/752/C time limit per test 2 seconds memory limit per t ...
- 变色DNA(最短路思维题)
个人心得:太水了,还是对最短路不太深入了解,无法构建出最短路模板,然后就是读题能力, 这题的关键在于转换为最短路模板,因为DFS我在24组超时了. 假设把从i到j的代价看做是权值,那么就是对权值的确立 ...
- CodeForces 577E Points on Plane(莫队思维题)
题目描述 On a plane are nn points ( x_{i}xi , y_{i}yi ) with integer coordinates between 00 and 10^{6} ...
- codeforces 689 Mike and Shortcuts(最短路)
codeforces 689 Mike and Shortcuts(最短路) 原题 任意两点的距离是序号差,那么相邻点之间建边即可,同时加上题目提供的边 跑一遍dijkstra可得1点到每个点的最短路 ...
- K-th Path CodeForces - 1196F
题目链接:https://vjudge.net/problem/CodeForces-1196F 题意:从图中找出第K短的最短路,最短路:从一个点到另一个的最短距离. 思路:题目说了,每两个点之间的边 ...
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
随机推荐
- Codeforces 1189F. Array Beauty
传送门 首先可以注意到序列里面元素的顺序对答案是没有影响的,所以二话不说先排序再看看怎么搞 考虑枚举每种子序列可能产生的贡献并算一下产生这个贡献的子序列有多少 考虑设 $F(x)$ 表示选择的元素差值 ...
- 怎样测试nginx.conf配置文件的正确性
方法: 使用 nginx -t 命令 nginx -t 如果一切正常, 则会显示:
- Windows 编程 键盘
键盘对于大家来说可能再也熟悉不过了,它和鼠标是现在最常用的电脑输入设备.虽然在现在的图形界面操作系统下使用鼠标比使用键盘更方便.更广泛,但是鼠标还是一时半会儿取代不了它的老前辈——键盘的地位,尤其是在 ...
- IE各版本处理XML的方式
一.支持DOM2级的方式我们知道,现阶段支持DOM2的主流浏览器有IE9+.Firefox.Opera.Chrome和Safari.1.1.创建XML//实际上,DOM2级在document.impl ...
- Django多对多
表名小写+_set() 得到的是一个QuertSet集合,她的后面可以跟 .add() .remove() .update() .clear() models.py 文件 # 学生表 ...
- Pytorch学习之源码理解:pytorch/examples/mnists
Pytorch学习之源码理解:pytorch/examples/mnists from __future__ import print_function import argparse import ...
- vue模板字符串写法
1.模板字符串拼接id <div class="thumbnail" :id="`ctrol_${item.id}`"> <i :class= ...
- 如何部署struts开发环境
1 首先登陆http://archive.apache.org/dist/struts/source/页面,会看到struts的下载页面 2 下载struts的最新版本struts2-2.2.1-sr ...
- go module 设置
国内无法获取被墙的go module,解决方法,设置环境变量 GO111MODULE=on goproxy=https://goproxy.io
- db2 with用法
最近在研究db2 递归查询时想到了with,一直以为with只是用来查询递归,但是实际with功能强大,还有更加强大的功能,偶然读到一位大神的文章,对with做了很详细的解读,特贴出来供大家学习研究 ...