• 壕壕的寒假作业


    description

    solution

    易知本题所构成的图是若干幅有向无环图,可能存在多个联通块.根据贪心策略,最早时间做完作业即将此作业的所有前置作业做完再做此作业即可.最晚完成某作业即除了此作业的后置作业外其余全部做完再做此作业.故欲求后置作业,我们可以按题目所描述的方式构图然后爆搜查找即可.至于前置作业,我们可以构造一幅反图,然后按照求后置作业的方式继续爆搜即可.

    code

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<set>
    #include<vector>
    #include<ctime>
    #define R register
    #define next kdjadskfj
    #define debug puts("mlg")
    #define mod K
    #define Mod(x) ((x%mod+mod)%mod)
    using namespace std;
    typedef long long ll;
    typedef long double ld;
    typedef unsigned long long ull;
    inline ll read();
    inline void write(ll x);
    inline void writeln(ll x);
    inline void writesp(ll x);
    ll n,m;
    ll to[21000],next[21000],head[21000],tot;
    inline void add(ll x,ll y){to[++tot]=y;next[tot]=head[x];head[x]=tot;}
    ll v[21000];
    bool vis[21000];
    ll sum;
    ll Head[21000],Next[21000],To[21000],Tot;
    inline void Add(ll x,ll y){
    	To[++Tot]=y;Next[Tot]=Head[x];Head[x]=Tot;
    }
    ll s[2100][2100],len[2100];
    inline void dfs1(ll x,ll Fa){
    	vis[x]=true;
    	for(R ll i=head[x],ver;i;i=next[i]){
    		ver=to[i];
    		if(vis[ver]) continue;
    		s[Fa][++len[Fa]]=ver;
    		dfs1(ver,Fa);
    	}
    }
    ll c[2100][2100],h[2100];
    bool Vis[2100];
    inline void dfs2(ll x,ll Fa){
    	c[Fa][++h[Fa]]=x;
    	Vis[x]=true;
    	for(R ll i=Head[x],ver;i;i=Next[i]){
    		ver=To[i];	
    		if(Vis[ver]) continue;
    		dfs2(ver,Fa);
    	}
    }
    int main(){
    	n=read();m=read();
    	for(R ll i=1;i<=n;i++) v[i]=read(),sum+=v[i];
    	for(R ll i=1,x,y;i<=m;i++){
    		x=read();y=read();
    		add(x,y);
    		Add(y,x);
    	}
    	for(R ll i=1;i<=n;i++){
    		memset(vis,0,sizeof vis);memset(Vis,0,sizeof Vis);
    		dfs1(i,i);dfs2(i,i);
    	}
    	for(R ll i=1;i<=n;i++){
    		ll ans=0;
    		for(R ll j=1;j<=h[i];j++) ans+=v[c[i][j]];
    		writesp(ans);
    		ans=0;
    		for(R ll j=1;j<=len[i];j++) ans+=v[s[i][j]];
    		writeln(sum-ans);
    	}
    }
    inline ll read(){ll x=0,t=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') t=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*t;}
    inline void write(ll x){if(x<0){putchar('-');x=-x;}if(x<=9){putchar(x+'0');return;}write(x/10);putchar(x%10+'0');}
    inline void writesp(ll x){write(x);putchar(' ');}
    inline void writeln(ll x){write(x);putchar('
    ');}
    
  • 相关阅读:
    axios 配置
    vue 配置App.js
    vue 挂载方式
    常用的js
    vuex
    vue搭建环境
    JS中 toString() & valueOf()
    html-webpack-plugin 中使用 title选项设置模版中的值无效
    webpack为什么加载不了css?
    visual studio for mac 安装文件
  • 原文地址:https://www.cnblogs.com/ylwtsq/p/13496275.html
Copyright © 2020-2023  润新知