诚心发问,请各位评价
  • 板块灌水区
  • 楼主LoverBoyInMacau
  • 当前回复24
  • 已保存回复24
  • 发布时间2020/10/28 11:25
  • 上次更新2023/11/5 09:41:30
查看原帖
诚心发问,请各位评价
262074
LoverBoyInMacau楼主2020/10/28 11:25

这种马蜂好看吗??
同学都说丑

#include<bits/stdc++.h>
#define re register
#define il inline
#define ll long long
#define db double
#define MAXL 1005
#define MAXP 5005
#define Eps  1e-5
#define rep(i,a,b)  for(re int i = a;i <= b;++ i)
#define Rep(i,a,b)  for(re int i = a;i < b;++ i)
#define drep(i,a,b) for(re int i = a;i >= b;-- i)
#define Drep(i,a,b) for(re int i = a;i > b;-- i)
#define star(i,x)   for(re int i = head[x];i;i = e[i].nxt)
#define fin(a)  freopen(#a".in","r",stdin)
#define fout(a) freopen(#a".out","w",stdout)

using namespace std;

il int read(){
    int x = 0;
    char ch = 0;
    while(!isdigit(ch))
        ch = getchar();
    while(isdigit(ch)){
        x = (x << 3) + (x << 1) + (ch ^ 48);
        ch = getchar();
    }
    return x;
}

il void write(int x){
    if(x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}

struct edge{
    int to,nxt,w;
    db sc;
}e[MAXP << 1];
int N,P,F[MAXL];
db dis[MAXL];
db L = 0,R = 100000,ans = 0;
int head[MAXL],cnt = 0;
bool vis[MAXL];

il void add(int u,int v,int w){
    e[++ cnt].to = v;
    e[cnt].w = w;
    e[cnt].nxt = head[u];
    head[u] = cnt;
}

il bool Spfa(int s){
    vis[s] = 1;
    star(i,s){
        int v = e[i].to;
        if(dis[v] > dis[s] + e[i].sc){
            dis[v] = dis[s] + e[i].sc;
            if(vis[v] || Spfa(v)){
                vis[v] = 0;
                return 1;
            }
        }
    }

    vis[s] = 0;
    return 0;
}

il void Trans(db x){
    rep(i,1,cnt){
        int v = e[i].to,w = e[i].w;
        e[i].sc = (db) w * x - F[v];
    }
    return;
}

il bool Check(){
    rep(i,1,N)
        if(Spfa(i))
            return 1;
    return 0;
}



int main(){
    #ifndef ONLINE_JUDGE
    fin(2868);
    fout(2868);
    #endif

    N = read();
    P = read();
    rep(i,1,N)
        F[i] = read();
    rep(i,1,P){
        int u = read(),v = read(),w = read();
        add(u,v,w);
    }
    
    while(R - L > Eps){
        db mid = (L + R) / 2.0;
        Trans(mid);

        if(Check()){
            ans = mid;
            L = mid;
        }
        else
            R = mid;
    }

    printf("%.2f",ans);
    return 0;
}
2020/10/28 11:25
加载中...