cf div 2 E 最短路 思维 Egor in the Republic of Dagestan

这是一篇关于图论问题的博客,讨论了如何阻止一个人从1号点到达n号点的最短路径。题目要求在有向图中,0权重的边只能由0权重的点通过,1权重的边只能由1权重的点通过。解决方案是从n号点开始,通过反向图,首次到达的节点颜色设定为与边相反的颜色,以封闭最短路径。
摘要由CSDN通过智能技术生成

Egor in the Republic of Dagestan

题目链接

题目大意

给一张有向图,边的边权只有0和1,让给点染色,点是0的点只能走边权是0 的边,点是1的点只能走边权是1的边,
有一个人要从1走到n,让给点染色,使这个人走不到n,如果不能让他走不到n,那就让他走的最短路距离最大。
输出最短路的距离和点权。

题解

目的是要把每个点走到n的最短路给封住,
建反向图,从n开始走,如果这是第一次走到点x,就把x的颜色变成跟这个边的颜色不同的颜色,因为第一次走到是最短距离,把这个最短距离封住就好。然后其他的就是最短路了。
为什么要倒着呢?因为这个点的颜色是根据下一个边定的。

#include<algorithm>
#include<iostream>
#include <cstdio>
#include <string>
#include <queue>
#include <cstring>
#include <stack>
#include <map>
#include <bitset>
#include <set>
#include <unordered_set>
#include <climits>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<double,double> pdd;
typedef unsigned long long ull;
typedef unordered_set<int>::iterator sit;
#define st first
#define sd second
#define mkp make_pair
#define pb push_back
void tempwj
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值