• luogu P4365 [九省联考2018]秘密袭击coat


    luogu

    这里不妨考虑每个点的贡献,即求出每个点在多少个联通块中为第(k)大的(这里权值相同的可以按任意顺序排大小),然后答案为所有点权值(*)上面求的东西之和

    把比这个点大的点看成(1),小于等于他的看成(0),那么就是要求出包含枚举的那个点并且权值和为(k-1)的联通块个数,可以树型(dp),设(f_{x,j})表示联通块最上面的点为(x)并且权值和为(j)的联通块数,转移树型背包即可,具体细节见代码.复杂度可以做到(O(nk))

    所以总复杂度为(O(n^2k)) ×

    所以总复杂度为(O( ext{能过}))

    正解?咕了

    // luogu-judger-enable-o2
    #include<bits/stdc++.h>
    #define LL long long
    #define uLL unsigned long long
    #define db double
    
    using namespace std;
    const int N=1666+10,mod=64123;
    int rd()
    {
        int x=0,w=1;char ch=0;
        while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
        return x*w;
    }
    void ad(int &x,int y){x+=y,x-=x>=mod?mod:0;}
    int to[N<<1],nt[N<<1],hd[N],tot=1;
    void add(int x,int y)
    {
    	++tot,to[tot]=y,nt[tot]=hd[x],hd[x]=tot;
    	++tot,to[tot]=x,nt[tot]=hd[y],hd[y]=tot;
    }
    int n,kk,w,rt,a[N],p[N],rk[N],sz[N],f[N][N],g[N];
    bool cmp(int aa,int bb){return a[aa]>a[bb];}
    void dp(int x,int ffa)
    {
    	int va=rk[x]<rk[rt];
    	sz[x]=va;
    	f[x][va]=1;
    	for(int i=hd[x];i;i=nt[i])
    	{
    		if(i==ffa) continue;
    		int y=to[i];
    		dp(y,i^1);
    		ad(f[y][0],1);
    		for(int j=0;j<=sz[x];++j)
    			for(int k=0;k<=sz[y]&&j+k<=kk;++k)
    				ad(g[j+k],1ll*f[x][j]*f[y][k]%mod);
    		sz[x]=min(sz[x]+sz[y],kk);
    		for(int j=0;j<=sz[x];++j)
    			f[x][j]=g[j],g[j]=0;
    	}
    }
    
    int main()
    {
        n=rd(),kk=rd(),w=rd();
        for(int i=1;i<=n;++i) a[i]=rd(),p[i]=i;
        sort(p+1,p+n+1,cmp);
        for(int i=1;i<=n;++i) rk[p[i]]=i;
        for(int i=1;i<n;++i) add(rd(),rd());
    	int ans=0;
    	for(int i=1;i<=n;++i)
    	{
    		rt=i;
    		dp(i,0);
    		ad(ans,1ll*a[i]*f[i][kk-1]%mod);
    		for(int j=1;j<=n;++j)
    			memset(f[j],0,sizeof(int)*(sz[j]+1));
    	}
    	printf("%d
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    递归实现随机数不重复问题
    今天写的一个工厂工具类
    Win7 x64 IIS运行ASP+Access故障完美解决方法(转)
    li中,标题和日期一排,且日期靠右
    [学习笔记] extends implements 的区别与联系 [转载]
    [学习笔记] vim使用大全 [转]
    MidPoint Displacement for Terrain Rendering
    CryEngine3 打造另一个真实世界
    Hello C++ AMP!
    DetailMap For Terrain Rendering
  • 原文地址:https://www.cnblogs.com/smyjr/p/11481826.html
Copyright © 2020-2023  润新知