AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 更多
    • 题解
    • 分享
    • 商店
    • 问答
    • 吐槽
  • App
  • 登录/注册

AcWing 361. 观光奶牛

作者: 作者的头像   Azusamitsusa ,  2023-02-27 15:03:47 ,  所有人可见 ,  阅读 18


0


//郑老师和阿梓一样可爱^_^

#include <bits/stdc++.h>
using namespace std;
const int N = 6e5 + 10;
//const int M = 998244353;
const int mod = 1e9+7;
#define int long long
#define db double
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl " \n"
#define all(x) (x).begin(),(x).end()
#define YES {cout<<"YES"<<endl;return;}
#define NO {cout<<"NO"<<endl;return;}
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define PII pair<int,int>
#define fast ios::sync_with_stdio(false);cin.tie(0);
int n,m;
db w[1010];
vector<pair<int,db>>G[1010];
bool check(db mid){
    vector<pair<int,db>>g[n+1];
    for(int u=1;u<=n;u++){
        for(auto [v,W]:G[u]){
            db c=mid*(db)W-(db)w[u];
            g[u].push_back({v,c});
        }
    }
    queue<int>q;
    vector<int>st(n+1),cnt(n+1);
    vector<db>dist(n+1);
    for(int i=1;i<=n;i++)q.push(i);
    while(q.size()){
        auto u=q.front();q.pop();
        if(st[u])continue;
        st[u]=1;
        for(auto [v,W]:g[u]){
            if(dist[v]>dist[u]+W){
                cnt[v]=cnt[u]+1;
                if(cnt[v]>=n)return true;
                dist[v]=dist[u]+W;
                q.push(v);
                st[v]=0;
            }
        }
    }
    return false;
}
void solve(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>w[i];
    for(int i=1;i<=m;i++){
        int a,b,c;cin>>a>>b>>c;
        G[a].push_back({b,c});
    }
    db l=0,r=1000;
    while(r-l>=1e-4){
        db mid=(l+r)/2;
        if(check(mid))l=mid;
        else r=mid;
    }
    printf("%.2lf",l);
}
signed main(){
    fast
    int t;t=1;//cin>>t;
    while(t--) {
        //run();
        solve();
    }
    return ~~(0^_^0);
}

0 评论

你确定删除吗?

© 2018-2023 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息