关于c++14(GCC 9)
查看原帖
关于c++14(GCC 9)
1000298
Vsinger_洛天依楼主2023/10/24 20:49

我在这道题里打了一段代码然后WA了每次分还不一样(20-90)

然后我把C++14换成了C++11,C++20,C++98发现都能A

代码(没啥可读性

#include<bits/stdc++.h>
using namespace std;
namespace Generate{
	long long n,seed;
	static const long long mod=1e9;
	long long Rand(long long x){
		seed=(1ll*seed*0x66CCF+19260817ll)%x+1;
		seed=(1ll*seed*0x77CCF+20060428ll)%x+1;
		seed=(1ll*seed*0x88CCF+12345678ll)%x+1;
		seed=(1ll*seed*0x33CCCCFF+10086001ll)%x+1;
		return seed;
	}
	void RS(long long* a, long long* u, long long* v){ //你需要传入三个参数,分别表示点权,一条边的两个端点 
		long long cnt=0;
		for(long long i=1;i<=n;i++)a[i]=Rand(mod); 
		for(long long i=2;i<=n;i++){
			long long fa=Rand(i-1);
			cnt++;
			u[cnt]=fa,v[cnt]=i;
		}
	}
};
inline long long read(){
    long long f=1,x=0;char ch;
    while(ch<'0'||ch>'9'){ch=getchar();if(ch=='-')f=-1;};
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();};
    return f*x;
}
long long ans,opt,n,a[0x66ccff],U[0x66ccff],V[0x66ccff];
vector<long long>LuoShuiTianYi[0x66ccff];
long long dfs(long long u,long long fa) {
    long long GuangYuYingDeDuiBai=0,WanFenZhiYiDeGuang=0;
    for (long long i=0;i<LuoShuiTianYi[u].size();i++) {
        long long v=LuoShuiTianYi[u][i];
        if(v==fa) 
            continue;
        long long YiHuaYiShiJie=dfs(v,u);
        GuangYuYingDeDuiBai+=YiHuaYiShiJie,
        WanFenZhiYiDeGuang=max(WanFenZhiYiDeGuang,YiHuaYiShiJie);
    }
    long long c=min(GuangYuYingDeDuiBai/2,GuangYuYingDeDuiBai-WanFenZhiYiDeGuang);
    long long YueHuaWu=max(0ll,min(c,min(a[u],GuangYuYingDeDuiBai-a[u])));
    ans+=max(0ll,a[u]-GuangYuYingDeDuiBai+YueHuaWu)-YueHuaWu;
    return a[u]-YueHuaWu;
}
int main() {
    opt=read();
    if(opt==1){
        n=read();
        for(long long i=1;i<=n;i++) 
            a[i]=read();
        for(long long i=1;i<n;i++) {
            long long 
            u=read(),
            v=read();
            LuoShuiTianYi[u].push_back(v);
            LuoShuiTianYi[v].push_back(u);
        }
    } 
    else{
        Generate::seed=read(),
        n=read();
        Generate::n=n;
        Generate::RS(a,U, V);
        for(long long i=1;i<n;i++) {
            LuoShuiTianYi[U[i]].push_back(V[i]);
            LuoShuiTianYi[V[i]].push_back(U[i]);
        }
    }
    dfs(1,0);
    cout<<ans<<"\n";
}
2023/10/24 20:49
加载中...