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<=个交换法则, ...
随机推荐
- Spring Boot(一) 初步理解Spring Boot
一.Spring Boot所解决的问题 Java开发十分笨重:繁多的配置.低下的开发效率.复杂的部署流程以头疼的第三方技术集成. Spring Boot的理念:习惯优于配置——项目中存在大量的配置,此 ...
- 有关this指针指向问题
在下面两个写法中 var obj = { foo: function () {} }; var foo = obj.foo; // 写法一 obj.foo() // 写法二 foo() 上面代码中,虽 ...
- OkHttp3 + retrofit2 封装
0.下载文件 1.gradle 添加 compile 'com.squareup.retrofit2:retrofit:2.1.0'compile 'com.squareup.retrofit2:co ...
- winForm入门学习
Windows窗体 属性: name:对象的名称 windowsState:初始化窗体的大小,Normal,Minimized,Maximized StartPosition:窗体起始位置,Manua ...
- MyEclipse eclipse console edit packageExplorer 颜色设置、个性化、常用设置
下列教程的图片是在 myeclipse2014 破解版上进行,会有些许不同,仅供参考! 1 编辑区颜色设置 主题设置 豆沙绿设置 RGB 203 233 207 2 console 3主题选择 4 去 ...
- Makefile中 -I -L -l区别
我们用gcc编译程序时,可能会用到"-I"(大写i),"-L"(大写l),"-l"(小写l)等参数,下面做个记录: 例: gcc -o he ...
- Subplots
数据读取: Subplotting 先展示下我们在画一张图时的步骤 生成一个matplotlib Figure对象 生成一个matplotlib AxesSubplot 对象,然后将其赋值给Figur ...
- 小程序e.currentTarget与e.target 两个属性的区别
注册事件是获取小程序组件上面的自定义属性值 e.target是获取当前点击的标签上面的自定义属性 e.currentTarget是获取注册点击事件标签内的自定义属性
- 一个用beego写的API项目
beego-api 一个使用beego写的API 支持Api日志 支持Swagger注解文档 项目地址: https://github.com/eternity-wdd/beego-api 使用说明 ...
- 简单易用的PIL,教你如何使用python实现自动化截屏
Python有个第三方模块叫做PIL是Python Imaging Library的缩写,是用来进行图像处理的,比如,改变图片颜色,图片缩放,图片裁剪等等基本图片操作.它还包含一个截屏的功能. 从以上 ...