样例没过但是AC了???
查看原帖
样例没过但是AC了???
578029
ivyjiao楼主2024/5/2 15:54

就离谱。样例2输出 10000005.00000000

#include<bits/stdc++.h>
#define fi first
#define se second
#define eps 1e-12
using namespace std;
int n,m,dis2[100001],u,v,w;
double dis[100001];
string s[100001];
vector<pair<int,int> >G[100001];
queue<int>q;
bool spfa(double s){
    while(q.size()) q.pop();
    memset(dis,0x3f,sizeof dis);
    memset(dis2,0,sizeof dis2);
    for(int i=1;i<=n;i++) q.push(i);
    dis[1]=0;
    while(q.size()){
        int u=q.front();
        q.pop();
        for(int i=0;i<G[u].size();i++){
            if(dis[G[u][i].se]>dis[u]+G[u][i].fi-s){
                dis[G[u][i].se]=dis[u]+G[u][i].fi-s;
                dis2[G[u][i].se]=dis2[u]+1;
                if(dis2[G[u][i].se]>n) return 1;
                q.push(G[u][i].se);
            }
        }
    }
    return 0;
}
int main(){
    while(cin>>n&&n){
        for(int i=1;i<=n;i++) G[i].clear();
        cin>>m;
        for(int i=1;i<=m;i++){
            cin>>u>>v>>w;
            G[u].push_back({w,v});
        }
        double l=-1e7-5,r=1e7+5;
        while(r-l>eps){
            double mid=(l+r)/2.0;
            if(spfa(mid)) r=mid;
            else l=mid;
        }
        printf("%.8f\n",l);
    }
}
2024/5/2 15:54
加载中...