zoukankan      html  css  js  c++  java
  • 3681. 中位数

    Aimeeeee

    把原图改造一下(>=mid)那么权值为1,反之为0

    然后跑最长路,如果最长路不小于0,那么就可行,反之不行

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    #define int long long
    using namespace std;
    int n,m;
    long long Aimee[1000001];
    int x,y;
    queue<int> q;
    struct b{
       int to;
       int ne;
    } ed[1000001];
    int Ai;
    int head[1000001];
    int vis[1000001];
    int dp[1000001];
    int tem[1000001];
    void add(int f,int to){
       Ai++;
       ed[Ai].to=to;
       ed[Ai].ne=head[f];
       head[f]=Ai;
       return ;
    }
    long long l,r;
    int dfs(int no,int k){
       if(vis[no])
       return dp[no];
       vis[no]=1;
       for(int i=head[no];i;i=ed[i].ne){
       	dp[no]=max(dp[no],dfs(ed[i].to,k)+tem[ed[i].to]);
       }
       return dp[no];
    }
    bool check(int now){
       for(int i=0;i<=n;++i){
       	tem[i]=(Aimee[i]>=now? 1 :-1);
       	vis[i]=0;
       	dp[i]=-999999999;
       }
       	dp[n]=0;
       	vis[n]=1;
       dfs(1,now);
       dp[1]+=tem[1];
       return dp[1]>=0;
    }
    signed main(){
       scanf("%d%d",&n,&m);
       for(int i=1;i<=n;++i){
       	scanf("%lld",&Aimee[i]);
       }
       for(int i=1;i<=m;++i){
       	scanf("%d%d",&x,&y);
       	add(x,y); 
       }
       int ans;
       ans=r=9999999990;
       
       while(l<=r){
       	long long mid=l+(r-l)/2;
       	if(check(mid)){
       		l=mid+1;
       		ans=mid;
       	}else{
       		r=mid-1;
       	}
       }
       cout<<(ans==(long long)9999999990?-1 :ans);
       return 0;
    }
    
  • 相关阅读:
    sort_action
    jedis
    ClassNotFoundException
    mysql-test-run.pl
    mysql 5.6 bug
    The basic principle of test case 修改引擎
    mysql 执行计划走索引
    mysql 执行计划走索引
    14.1.2 Checking InnoDB Availability 检查InnoDB 可用性:
    14.1.2 Checking InnoDB Availability 检查InnoDB 可用性:
  • 原文地址:https://www.cnblogs.com/For-Miku/p/14082773.html
Copyright © 2011-2022 走看看