题意
给定一个n个点m条边的加权有向图,求平均权值最小的回路。
n <= 50
题解
有点像强连通分量,但是SCC只会求出最大的环。所以不能用。
这里二分答案,然后将所有边减去二分的答案,然后跑SPFA,如果有负环,说明答案有效。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 55;
typedef pair<int,double> pii;
#define to first
#define w second
vector<pii> G[maxn];
int n,m, cnt[maxn], inq[maxn];
double d[maxn];
void add(int u, int v,int w) {
G[u].push_back(pii(v,w));
}
bool spfa() {
queue<int> que;
memset(cnt,0,sizeof cnt);
memset(inq,0,sizeof inq);
for(