t
a
g
:
tag :
tag: 拓扑
堆优化DIJ
思维
传送门 :
题意 :
给定多个双向边和多个单向边,双向边边权必然为正,单向边可能为负,每个双向边构成的连通块只能由单向边相连,询问从 S S S开始到其他点的最短路
思路 :
首先题意很明显的想让我们分块处理,即先处理出双向边的所有连通块,这样子整个图,就会变成一个 D A G DAG DAG
下面这里就有一条需要注意的是 : D A G DAG DAG上 我们可以线性的时间求出单源最短路
因此我们直接对 D A G DAG DAG求一个最短路即可
code :
// Problem: 道路与航线
// Contest: AcWing
// URL: https://www.acwing.com/problem/content/344/
// Memory Limit: 64 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
// Problem: B. Rising Sand
// Contest: Codeforces - Codeforces Round #803 (Div. 2)
// URL: https://codeforces.com/contest/1698/problem/B
// Memory Limit: 256 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define IOS ios::sync_with_stdio(false);
#define CIT cin.tie(0);
#define COT cout.tie(0);
#define ll long long
#define x first
#define y second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(),x.end()
typedef pair pii;
#define Fup(i,a,b) for(int i=a;i=b;i--)
#define cer(a) cerr>c;
road[a].pb({b,c});
road[b].pb({a,c});
}
Fup(i,1,t){
if(!id[i]){
++bcnt;
dfs(i);
}
}
Fup(i,1,p){
int a,b,c;cin>>a>>b>>c;
road[a].pb({b,c});
deg[id[b]]++;
}
topsort();
Fup(i,1,t){
if(dist[i] > INF/2)cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?