QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#620179#2443. Dense Subgraphurayaha_yahaura#WA 282ms21536kbC++142.2kb2024-10-07 16:53:592024-10-07 16:54:07

Judging History

你现在查看的是最新测评结果

  • [2024-10-07 16:54:07]
  • 评测
  • 测评结果:WA
  • 用时:282ms
  • 内存:21536kb
  • [2024-10-07 16:53:59]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=40005;
const int M=5;
const int MOD=(int)1e9+7;
#define out(x) cerr<<#x<<'='<<(x)<<' '
#define outln(x) cerr<<#x<<'='<<(x)<<'\n'
int add(int x,int y){x+=y; return x>=MOD ? x-MOD : x;}
int sub(int x,int y){x-=y; return x<0 ? x+MOD : x;}
int mul(int x,int y){return 1ll*x*y%MOD;}
void Add(int &x,int y){x=add(x,y);}
void Sub(int &x,int y){x=sub(x,y);}
void Mul(int &x,int y){x=mul(x,y);}
int f[N][1<<M],g[N],ss[N][1<<M];
vector<int> G[N],son[N];
int n,x,a[N],sz[N],s[N];
void dfs(int u,int fa){
    for(auto &to : G[u]){
        if(to==fa) continue;
        dfs(to,u); sz[u]++;
        son[u].push_back(to);
    }
    g[u]=1;
    f[u][0]=1; ss[u][0]=a[u];
    for(auto &to : G[u]) if(to!=fa){
        int sum=0;
        for(int S=0;S<(1<<sz[to]);S++) Add(sum,f[to][S]);
        Add(sum,g[to]);
        Mul(g[u],sum);
        Mul(f[u][0],g[to]);
    }


    for(int S=1;S<(1<<sz[u]);S++){
        int sum=a[u]; 
        for(int i=0;i<sz[u];i++) if(S>>i&1) sum+=a[son[u][i]];
        ss[u][S]=sum;
        if(sum>0) continue;
        f[u][S]=1;
        for(int i=0;i<sz[u];i++){
            int v=son[u][i];
            if(S>>i&1){
                sum=0;
                for(int T=0;T<(1<<sz[v]);T++){
                    if(a[u]+ss[v][T]<=0) Add(sum,f[v][T]);
                }
                Mul(f[u][S],sum);
            }
            else{
                Mul(f[u][S],g[v]);
            }
        }
    }
    // out(u); outln(g[u]);
    // for(int i=0;i<(1<<sz[u]);i++) cout<<f[u][i]<<" "; cout<<endl; cout<<endl;
}

void init(){
    scanf("%d%d",&n,&x);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]-=x;
    for(int i=1;i<=n;i++) G[i].clear(),sz[i]=0,son[i].clear();
    for(int i=1;i<n;i++){
        int x,y; scanf("%d%d",&x,&y);
        G[x].push_back(y); G[y].push_back(x);
    }
    memset(f,0,sizeof(f)); memset(g,0,sizeof(g));
}
void solve(){
    dfs(1,-1);
    int ans=0;
    for(int i=0;i<(1<<sz[1]);i++) Add(ans,f[1][i]);
    Add(ans,g[1]);
    printf("%d\n",ans);
}

int main(){
    int T; scanf("%d",&T);
    while(T--){
        init();
        solve();
    }
}

详细

Test #1:

score: 0
Wrong Answer
time: 282ms
memory: 21536kb

input:

30
10 11086
10189 24947 2265 9138 27104 12453 15173 3048 30054 2382
8 1
1 4
5 10
10 4
3 5
2 10
9 7
6 10
7 1
15 9664
4127 24649 13571 8586 34629 8644 3157 33133 3713 32646 29412 8108 13583 21362 23735
14 9
7 1
15 12
10 15
2 6
3 11
9 1
1 11
6 12
4 10
13 15
8 15
12 11
5 3
20 29310
21738 9421 8412 4617 ...

output:

320
3312
1048576
703391137
354818952
345523413
65695422
471708520
527067474
916105581
973401160
619388222
503656482
51289536
732832863
830197944
470216934
953668317
438458641
831298708
317610455
418809084
294752571
45024183
816501286
779978391
392083356
634600456
907786859
699381012

result:

wrong answer 4th lines differ - expected: '60461799', found: '703391137'