社区讨论
求调玄关
P3199[HNOI2009] 最小圈参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mjxlphn7
- 此快照首次捕获于
- 2026/01/03 09:05 2 个月前
- 此快照最后确认于
- 2026/01/06 11:25 上个月
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 3010;
vector<pair<int,int>> G[N];
int dis[N];
bool vis[N];
int n,m;
bool SPFA(int u, double mid) {
vis[u] = 1;
for (auto x : G[u]) {
int v = x.first;
double w = x.second - mid;
if (dis[u] + w < dis[v]) {
dis[v] = dis[u] + w;
if (vis[v] || SPFA(v, mid)) return 1;
}
}
vis[u] = 0;
return 0;
}
bool check(double mid) {
for (int i = 1; i <= n; i++) dis[i] = 0, vis[i] = 0;
for (int i = 1; i <= n; i++)
if (SPFA(i, mid)) return 1;
return 0;
}
signed main(){
ios::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
cin>>n>>m;
for(int i = 1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
G[u].push_back({v,w});
}
for(int i = 1;i<=n;i++){
G[0].push_back({i,0});
}
double l = 0,r = 1e10;
while(r-l>=1e-9){
double mid = (l+r)/2.0;
if(!check(mid)){
l = mid;
}else{
r = mid;
}
}
printf("%.8lf",r);
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...