差分约束系统
利用最短路径算法结束后图中任意一条边u->v,都满足dis[v]<=dis[u]+w(u,v)的性质,将一个所有不等式的形式均为Xi<=Xj+k的不等式组,转化成一个有向图,其中,每一条不等式转化为一条由j指向i、边权为k的有向边。
在构造好的有向图上进行最短路径算法,如果图中有负环,则无解。否则,点i到点j的最短路径dis[i][j]就为Xj-Xi的最大值,即当Xi确定时,Xj=Xi+dis[i][j]且此时Xj最大。
(如果是求解最小值,就是用最长路径算法,将一个所有不等式的形式均为Xi>=Xj+k的不等式组变成有向图。像形如Xi>=Xj+w的不等式,则连一条由j指向i,边权为w的边。其余过程与上面相似)
如果有疑问,或觉得以上结论有误的,移步大佬博客。
学废了以后来教教我,我也不太确定我的理解是否正确。。。
恒星的亮度
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int N=1e6;
int n,m,ti,top,tot;
//强连通分量i里每个恒星的亮度都为f[i]
int st[N],dfn[N],low[N],col[N],deg[N],f[N],sum[N];
int cnt,he[N],ne[N],to[N],we[N];
long long ans;
vector <pair<int,int> > vec[N];
void add(int u,int v,int w)
{
cnt++;
ne