Codechef Bear and Clique Distances
描述:共有N个点,前1—K个点任意两点之间有一条无向边,边的权值为X,再任意给M条边(u,v,w)(不重复),求任意一点到其余各点的最短路。
分析:
1.最短路算法(usual Dijkstra)+一点小变形(a little twist)
2.trick:设置一个变量upd=1;因为前K个点之前两两是连通的,所以当第一次到前K个点中任一点(假设为u)时,就可以更新得到前K个点的距离(除了u)d[i](i<=k)为d[u]+X。
即:1-K中任意一点作为中间点更新1-K之间其他点的距离只用更新一次,因为最短路算法中每次队列取出来的点都是当前剩下点中距离源点最近的点,还有就是下次再更新到1-K点中的点时不用再继续更新与该点相连的1-K点的距离了
3.复杂度:O((m+k)log(V))
4.边的权值范围到达1e9,前面WA了几次,因为初始化inf=1e9+10;值太小了,有很多边,假如所有边大小都是1e9,则路径长度加起来远远大于初始化位1e9+10的inf。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map> using namespace std;
#define maxn 100000+10
#define inf 1e15+10 //该题中inf定义为1e9+10 太小,导致出错
#define ll long long struct Edge{
ll u,v,w;
Edge(ll u=,ll v=,ll w=):u(u),v(v),w(w){}
}; struct Node{
ll d,u;
bool operator<(const Node& rhs)const{
return d>rhs.d;
}
}; Edge edges[maxn];
vector<ll>G[maxn];
ll N,M,X,K,S;
bool vis[maxn];
ll d[maxn]; void Dijkstra()
{
bool flag=false;
priority_queue<Node>Q; for(int i=;i<=N;i++) d[i]=inf;
//memset(d,127,sizeof(d));
memset(vis,,sizeof(vis)); d[S]=;
Q.push(Node{,S});
while(!Q.empty())
{
Node x=Q.top();Q.pop();
//cout<<x.d<<" "<<x.u<<endl;
ll u=x.u;
if(vis[u]) continue;
vis[u]=true;
if(u<=K && !flag)
{
flag=true;
for(int i=;i<=K;i++)
{
if(i!=u && d[i]>d[u]+X)
{
d[i]=d[u]+X;
Q.push(Node{d[i],i});
}
}
}
//cout<<G[u].size()<<endl;
for(int i=;i<G[u].size();i++)
{
ll id=G[u][i];
//cout<<id<<endl;
ll x1=edges[id].u,x2=edges[id].v,x3=edges[id].w;
ll v=u==x1?x2:x1;
if(d[v]>d[u]+x3)
{
d[v]=d[u]+x3;
Q.push(Node{d[v],v});
}
} } } int main()
{
int t;
scanf("%d",&t);
while(t--)
{ scanf("%lld%lld%lld%lld%lld",&N,&K,&X,&M,&S);
for(int i=;i<=N;i++) G[i].clear();
for(int i=;i<M;i++)
{
ll a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
edges[i]=Edge(a,b,c);
G[a].push_back(i);
G[b].push_back(i);
}
//for(int i=1;i<=N;i++) cout<<G[i].size()<<" ";
//cout<<endl;
Dijkstra(); for(int i=;i<=N;i++)
printf("%lld%c",d[i],i==N?'\n':' ');
}
return ;
}
Codechef Bear and Clique Distances的更多相关文章
- CodeChef Sum of distances(分治)
CodeChef Sum of distances(分治) 题目大意 有一排点,每个点 i 向 \(i + 1, i + 2, i + 3\) 分别连价值为 \(a_i,b_i,c_i\) 的有向边, ...
- Codeforces CF#628 Education 8 C. Bear and String Distance
C. Bear and String Distance time limit per test 1 second memory limit per test 256 megabytes input s ...
- Educational Codeforces Round 8 C. Bear and String Distance 贪心
C. Bear and String Distance 题目连接: http://www.codeforces.com/contest/628/problem/C Description Limak ...
- codeforces 628C C. Bear and String Distance
C. Bear and String Distance time limit per test 1 second memory limit per test 256 megabytes input s ...
- codechef营养题 第三弹
第三弾が始まる! codechef problems 第三弹 一.Motorbike Racing 题面 It's time for the annual exciting Motorbike Rac ...
- 【BZOJ-3514】Codechef MARCH14 GERALD07加强版 LinkCutTree + 主席树
3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1288 Solved: 490 ...
- Codeforces CF#628 Education 8 F. Bear and Fair Set
F. Bear and Fair Set time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- UVA11324 The Largest Clique[强连通分量 缩点 DP]
UVA - 11324 The Largest Clique 题意:求一个节点数最大的节点集,使任意两个节点至少从一个可以到另一个 同一个SCC要选一定全选 求SCC 缩点建一个新图得到一个DAG,直 ...
- CF #296 (Div. 1) B. Clique Problem 贪心(构造)
B. Clique Problem time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
随机推荐
- Oracle synonym 同义词
Oracle synonym 同义词 1.Oracle synonym 同义词是数据库当前用户通过给另外一个用户的对象创建一个别名,然后可以通过对别名进行查询和操作,等价于直接操作该数据库对象. 2. ...
- Visual Studio 2017 怎么将自动生成属性设置为旧版格式
工具:Visual Studio 2017 1.点击工具,进入选项 2.选项窗口左侧找到C#--代码样式,点击 3.找到表达式首选项中:使用属性的表达式主体.使用索引器的表达式主体和使用访问器的表达式 ...
- .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入
作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9998021.html 写在前面 上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它,接着 ...
- java设计模式(2)---六大原则
设计模式之六大原则 这篇博客非常有意义,希望自己能够理解的基础上,在实际开发中融入这些思想,运用里面的精髓. 先列出六大原则:单一职责原则.里氏替换原则.接口隔离原则.依赖倒置原则.迪米特原则.开闭原 ...
- Qt窗口定制
qt中的QWidget窗口支持窗体绘制,但是不支持窗口标题栏绘制,想要美观的界面,还需要自己去定制,下面我就介绍一种定制窗体的方法 一个窗口无非就3部分,标题栏.窗体和状态栏,接下来我定制的窗口没有状 ...
- asp.net core 系列 12 选项 TOptions
一.概述 本章讲的选项模式是对Configuration配置的功能扩展. 讲这篇时有个专用名词叫“选项类(TOptions)” .该选项类作用是指:把选项类中的属性与配置来源中的键关联起来.举个例,假 ...
- Android--加载大分辨率图片到内存
前言 在使用ImageView显示图片的时候,直接加载一个图片资源到内存中,经常会出现内存溢出的错误,这是因为有些图片的分辨率比较高,把它直接加载到内存中之后,会导致堆内存溢出的问题.这篇博客就来讲解 ...
- [零] JavaIO入门简介 程序设计语言 为什么需要IO库
本文旨在引申出来Java IO的概念含义,作为学习JavaIO一个起步的了解知识点 部分内容引自<计算机操作系统第三版> 操作系统的文件管理 "在现代计算机系统中,要用到 ...
- 痞子衡嵌入式:第一本Git命令教程(2)- 连接(remote/clone)
今天是Git系列课程第二课,上一课我们已经学会在本地创建一个空仓库,痞子衡今天要讲的是如何将本地仓库与远程建立联系. 1.将本地仓库挂上远程git remote 本地建好了仓库,我们希望能够挂到远程服 ...
- git http服务免登录实现(免去每次请求用户名密码输入,Visual Studio可用)
最近用了Bonobo搭起了Git服务,弄了个批处理文件来避免每次都要输入用户名密码. 此脚本分为三个步骤:1.添加用户变量HOME:2.添加用户_netrc文件:3.添加windows普通凭据(因为V ...