QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#620179 | #2443. Dense Subgraph | urayaha_yahaura# | WA | 282ms | 21536kb | C++14 | 2.2kb | 2024-10-07 16:53:59 | 2024-10-07 16:54:07 |
Judging History
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'