BUPT2017 wintertraining(15) #7B

题意

n个点m条无向有权边(2 ≤ n ≤ 10^5, 1 ≤ m ≤ 10^5),每个点标记了0或1,求所有1中,最近的两个1的下标及距离。

题解

先用SPFA求出每个点离标记1的点最近的距离,d[i]。

同时记录下每个点最近的1的下标。

两个最近的1,要么是被一条边连着,要么是被几个0隔着的边连着。

我们通过寻找它们中间的边来找出它们。

枚举每条边,如果相邻都是1,或者都是0且最近的1不是同一个,或者一个1,一个0,那么这条边两个端点的最近1的距离,就可以拿来更新答案。

需要long long。

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <queue>
#define inf 0x3f3f3f3f3f3f3f3f
#define N 100005
#define ll long long
using namespace std; typedef pair<ll,int> PII;
vector<PII> edge[N<<1]; int n,m,a[N];
ll d[N];
int near[N];
bool b[N];
queue <int> q; void SPFA(){
for(int i=1;i<=n;++i)if(!d[i]) {
q.push(i);
b[i]=true;
near[i]=i;
}
while(!q.empty()){
int u=q.front(); q.pop(); b[u]=false;
for(int j=0;j<edge[u].size();++j){
int v = edge[u][j].second;
ll w = edge[u][j].first;
if(d[u]+w<d[v]){
d[v]=d[u]+w;
near[v]=near[u];
if(!b[v]){
q.push(v);
b[v]=true;
}
}
}
}
}
int main() {
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
d[i]=a[i]?0:inf;
}
for(int i=1;i<=m;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
edge[u].push_back(make_pair(w,v));
edge[v].push_back(make_pair(w,u));
}
SPFA();
int ansa,ansb;
ll ans=inf;
for(int i=1;i<=n;++i)
for(int j=0;j<edge[i].size();++j){
int to = edge[i][j].second;
ll w = edge[i][j].first;
if(a[i]&&a[to]){
if(ans>w){
ans=w;
ansa=i;
ansb=to;
}
}else if(near[i]!=near[to]){
if(ans>d[i]+d[to]+w){
ans=d[i]+d[to]+w;
ansa=near[i];
ansb=near[to];
}
}
}
if(ans!=inf)printf("%lld\n%d %d",ans,ansa,ansb);
else puts("No luck at all");
return 0;
}

【Gym - 100812G 】Short Path (SPFA)的更多相关文章

  1. 【 Gym 101116K 】Mixing Bowls(dfs)

    BUPT2017 wintertraining(15) #4H Gym - 101116K 题意 给定一个菜谱,大写的单词代表混合物,小写的代表基础原料.每个混合物由其它混合物或基础原料组成,不会间接 ...

  2. 【 Gym - 101124E 】Dance Party (数学)

    BUPT2017 wintertraining(15) #4G Gym - 101124 E.Dance Party 题意 有c种颜色,每个颜色最多分配给两个人,有M个男士,F个女士,求至少一对男士同 ...

  3. 【 Gym - 101138F 】GukiZ Height (数学)

    BUPT2017 wintertraining(15) #4 C Gym - 101138F 题意 初始高度0,目标值h,第i天目标值会下降i,当前高度会改变a[i%n],求高度不小于目标值的最早的时 ...

  4. 【POJ - 3126】Prime Path(bfs)

    Prime Path 原文是English 这里直接上中文了 Descriptions: 给你两个四位的素数a,b.a可以改变某一位上的数字变成c,但只有当c也是四位的素数时才能进行这种改变.请你计算 ...

  5. 【Gym - 101002F】Mountain Scenes(dp)

    Mountain Scenes Descriptions 给你一个长度为n的丝带,一个宽w一个高h 的 格子,用丝带去填充格子,这填充后只需要满足至少有一列的丝带长度与其他格子不同即可.丝带可以不全部 ...

  6. 【Win10 UWP】QQ SDK(二):SDK的回调处理

    上一讲,我们介绍了QQ SDK的使用方法,请看<[Win10 UWP]QQ SDK(一):SDK基本使用方法> 一. 回调的基本形式 从前面的介绍中我们知道,我们的应用和QQ客户端之间需要 ...

  7. 【Win10 UWP】QQ SDK(一):SDK基本使用方法

    每当开发一个应用需要社交分享的应用时,总是心里咯噔一下:到底什么时候分享能加上QQ和微信?除了WP8.0版本的微信SDK,官方似乎从未正面发布过适应时代发展的QQ SDK,就连后台,也没有一个可以创建 ...

  8. 【UOJ#242】【UR#16】破坏蛋糕(计算几何)

    [UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...

  9. 【UOJ#386】【UNR#3】鸽子固定器(贪心)

    [UOJ#386][UNR#3]鸽子固定器(贪心) 题面 UOJ 题解 一个不难想到的暴力做法是把东西按照\(s\)排序,这样子我们枚举极大值和极小值,那么我们选择的一定是这一段之间\(v\)最大的那 ...

随机推荐

  1. python学习之第八篇——字典嵌套之字典中嵌套字典

    cities = { 'shanghai':{'country':'china','population':10000,'fact':'good'}, 'lendon':{'country':'eng ...

  2. eclipse、myeclipse写类时,自动生成注释

    在类的上边/**+enter自动生成注释. 设置方法:Window--Prefences--Java--Code Style--Code Templates--Comments--Types--Edi ...

  3. Jenkins deploy war to tomcat over https

    ssl - HTTPS login with Spring Security redirects to HTTP - Stack Overflow https://stackoverflow.com/ ...

  4. Android下的软件合集

    在平常使用Android手机的时候,选择一个好的软件可以做到事半功倍的效果,所以在此总结一下,加速我们的工作与生活效率 1) ConnectBot ConnectBot是一个Android操作系统上的 ...

  5. JSON for-in 遍历

    (代码均以js代码示例) 1.可以使用 for-in 来循环对象的属性,使用中括号([])来访问属性的值: 这中方法便于一些在不确定有属性的情况下使用. var myObj = { "nam ...

  6. [转帖]FORFILES 的简单介绍。

    FORFILES https://blog.csdn.net/sandy9919/article/details/82932460 命令格式: forfiles.exe /p "D:\备份& ...

  7. 1228.Poor Pigs 可怜的猪

    转自[LeetCode] Poor Pigs 可怜的猪 There are 1000 buckets, one and only one of them contains poison, the re ...

  8. 金蝶CLOUD与EAS的区别

    1.金蝶K/3 WISE主要面向单体制造企业(主要是离散制造企业):2.金蝶K/3 Cloud主要面向业务类型单一(即主营业务单一)的.注重供应链与生产业务协同的.中小型(二层集团??)集团性企业(主 ...

  9. 校园电商项目3(基于SSM)——配置Maven

    步骤一:添加必要文件夹 先在src/main/resources下添加两个文件夹 接着在webapp文件夹下添加一个resources文件夹存放我们的静态网页内容 WEB-INF里的文件是不会被客户端 ...

  10. Python 基础之----网络编程

    阅读目录 一 客户端/服务端架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 八 基于UDP的套接字 九 粘包现象 ...