提出 #45322143
ソースコード 拡げる
#include <iostream>
#include <algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<iomanip>
#include<ctime>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<bitset>
#include<cassert>
#define sqr(x) ((x)*(x))
#define fz1(i,n) for ((i)=1;(i)<=(n);(i)++)
#define fd1(i,n) for ((i)=(n);(i)>=1;(i)--)
#define fz0g(i,n) for ((i)=0;(i)<=(n);(i)++)
#define fd0g(i,n) for ((i)=(n);(i)>=0;(i)--)
#define fz0k(i,n) for ((i)=0;(i)<(n);(i)++)
#define fd0k(i,n) for ((i)=(((long long)(n))-1);(i)>=0;(i)--)
#define fz(i,x,y) for ((i)=(x);(i)<=(y);(i)++)
#define fd(i,y,x) for ((i)=(y);(i)>=(x);(i)--)
#define fzin fz1(i,n)
#define fzim fz1(i,m)
#define fzjn fz1(j,n)
#define fzjm fz1(j,m)
#define ff(c,itr) for (__typeof((c).begin()) itr=(c).begin();itr!=(c).end();++itr)
#define pb push_back
#define mk make_pair
#define rdst(st,len){static char ss[len];scanf(" %s",ss);(st)=ss;}
#define spln(i,n) (i==n?'\n':' ')
#define fac_init(n){fac[0]=fac[1]=inv[1]=fi[0]=fi[1]=1;fz(i,2,n){fac[i]=1ll*fac[i-1]*i%mod;inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;fi[i]=1ll*fi[i-1]*inv[i]%mod;}}
using namespace std;
typedef long long i64;
typedef long double f80;
typedef unsigned int u32;
typedef unsigned long long u64;
//typedef __int128 i128;
//typedef unsigned __int128 u128;
#ifndef ONLINE_JUDGE
FILE *___=freopen("1.in","r",stdin);
#endif
inline void read(int &x)
{
char c;int f=1;
while(!isdigit(c=getchar()))if(c=='-')f=-1;
x=(c&15);while(isdigit(c=getchar()))x=(x<<1)+(x<<3)+(c&15);
x*=f;
}
const int mod=998244353;
int n,m,i,j,k,typ[155],cc[2],ans;
vector<int> bi[155];
void dfs1(int x,int p)
{
cc[typ[x]=typ[p]^1]++;
ff(bi[x],it)if(*it!=p){
dfs1(*it,x);
}
}
int f[155][305][2][2],nf[305][2][2];
void dfs2(int x,int p)
{
f[x][typ[x]==1?n+1:n-1][0][0]=1;int i,j,a,b,c,d;
ff(bi[x],it)if(*it!=p){
dfs2(*it,x);memset(nf,0,sizeof(nf));
fz(i,-n,n)fz0k(a,2)fz0k(b,2)if(f[x][i+n][a][b]){
if(typ[*it]==0){
nf[i+n][1][b]=(nf[i+n][1][b]+f[x][i+n][a][b])%mod;
}
else{
nf[i+n][a][1]=(nf[i+n][a][1]+f[x][i+n][a][b])%mod;
}
fz(j,-n,n)fz0k(c,2)fz0k(d,2)if(f[*it][j+n][c][d]){
nf[i+j+n][a|c][b|d]=(nf[i+j+n][a|c][b|d]+1ll*f[x][i+n][a][b]*f[*it][j+n][c][d])%mod;
}
}
memcpy(f[x],nf,sizeof(nf));
}
fz0k(a,2)fz0k(b,2){
if(!a&&(!p||typ[p]!=0)) continue;
if(!b&&(!p||typ[p]!=1)) continue;
ans=(ans+f[x][n+cc[1]-cc[0]][a][b])%mod;
}
}
int sz0[155],sz1[155];
int dfn[155],dfe[155],mp[155],ti;
void dfs3(int x,int p)
{
sz0[x]=sz1[x]=0;
if(typ[x]==1) sz1[x]++; else sz0[x]++;
mp[dfn[x]=++ti]=x;
ff(bi[x],it)if(*it!=p){
dfs3(*it,x);
sz0[x]+=sz0[*it];
sz1[x]+=sz1[*it];
}
dfe[x]=ti;
}
void dfs5(int x,int p)
{
sz0[x]=sz1[x]=0;
if(typ[x]==1) sz1[x]++; else sz0[x]++;
ff(bi[x],it)if(*it!=p){
dfs5(*it,x);
sz0[x]+=sz0[*it];
sz1[x]+=sz1[*it];
}
}
bool dfs4(int x,int p,int c0,int c1)
{
if(typ[x]==1) c1++; else c0++;
c0--;c1--;
int s0=0,s1=0;bool lf=1;
ff(bi[x],it)if(*it!=p){
s0+=sz0[*it];
s1+=sz1[*it];
lf=0;
}
if(lf) return 0;
if(typ[x]==1){
if(c1==0) return 1;
}
else{
if(c0==0) return 1;
}
ff(bi[x],it)if(*it!=p){
if(dfs4(*it,x,c0+s0-sz0[*it],c1+s1-sz1[*it])) return 1;
}
return 0;
}
int dp[155][155][155][2];
int res[155][155];
void solve(int nd)
{
memset(dp,0,sizeof(dp));int c0=0,c1=0,i,j,k,p;
dp[1][0][0][0]=1;
fz(i,2,ti){
int x=mp[i],to=dfe[x];
fz0g(j,c0)fz0g(k,c1)fz0k(p,2)if(dp[i-1][j][k][p]){
dp[i][j][k][p]=(dp[i][j][k][p]+dp[i-1][j][k][p])%mod;
dp[to][j+sz0[x]][k+sz1[x]][p|(typ[x]==nd)]=(dp[to][j+sz0[x]][k+sz1[x]][p|(typ[x]==nd)]+dp[i-1][j][k][p])%mod;
}
c0+=(typ[x]==0);c1+=(typ[x]==1);
}
fz0g(j,c0)fz0g(k,c1){
res[j][k]=(res[j][k]+dp[ti][j][k][1])%mod;
}
}
int main()
{
read(n);fz1(i,n-1){int x,y;read(x);read(y);bi[x].push_back(y);bi[y].push_back(x);}
dfs1(1,0);
if(cc[0]==cc[1]) ans=(ans+1)%mod;
ans=(ans+1)%mod;
dfs2(1,0);
fz1(i,n){
ff(bi[i],it){
ti=0;fz1(j,n)dfn[j]=0;
dfs3(i,*it);
memset(res,0,sizeof(res));
solve(typ[i]);
int c0=0,c1=0;
fz1(j,n)if(!dfn[j]){
if(typ[j])c1++;
else c0++;
}
dfs5(*it,i);
fz0g(j,n)fz0g(k,n)if(res[j][k]&&j+c0==k+c1){
if(dfs4(*it,i,j,k)){
ans=(ans-res[j][k]+mod)%mod;
}
}
}
}
printf("%d\n",ans);
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
C - Shrink the Tree |
| ユーザ |
csy2005 |
| 言語 |
C++ 20 (gcc 12.2) |
| 得点 |
1500 |
| コード長 |
4447 Byte |
| 結果 |
AC |
| 実行時間 |
555 ms |
| メモリ |
33708 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
1500 / 1500 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 00-sample-004.txt |
| All |
00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 00-sample-004.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt, 01-022.txt, 01-023.txt, 01-024.txt, 01-025.txt, 01-026.txt, 01-027.txt, 01-028.txt, 01-029.txt, 01-030.txt, 01-031.txt, 01-032.txt, 01-033.txt, 01-034.txt, 01-035.txt, 01-036.txt, 01-037.txt, 01-038.txt, 01-039.txt, 01-040.txt, 01-041.txt, 01-042.txt, 01-043.txt, 01-044.txt, 01-045.txt, 01-046.txt, 01-047.txt, 01-048.txt, 01-049.txt, 01-050.txt, 01-051.txt, 01-052.txt, 01-053.txt, 01-054.txt, 01-055.txt, 01-056.txt, 01-057.txt, 01-058.txt, 01-059.txt, 01-060.txt, 01-061.txt, 01-062.txt, 01-063.txt, 01-064.txt, 01-065.txt, 01-066.txt, 01-067.txt, 01-068.txt, 01-069.txt, 01-070.txt, 01-071.txt, 01-072.txt, 01-073.txt, 01-074.txt, 01-075.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00-sample-001.txt |
AC |
18 ms |
32980 KiB |
| 00-sample-002.txt |
AC |
20 ms |
32976 KiB |
| 00-sample-003.txt |
AC |
27 ms |
33004 KiB |
| 00-sample-004.txt |
AC |
62 ms |
32988 KiB |
| 01-001.txt |
AC |
14 ms |
32964 KiB |
| 01-002.txt |
AC |
364 ms |
33544 KiB |
| 01-003.txt |
AC |
172 ms |
33140 KiB |
| 01-004.txt |
AC |
323 ms |
33408 KiB |
| 01-005.txt |
AC |
85 ms |
32976 KiB |
| 01-006.txt |
AC |
158 ms |
33208 KiB |
| 01-007.txt |
AC |
442 ms |
33472 KiB |
| 01-008.txt |
AC |
70 ms |
33144 KiB |
| 01-009.txt |
AC |
463 ms |
33476 KiB |
| 01-010.txt |
AC |
204 ms |
33256 KiB |
| 01-011.txt |
AC |
453 ms |
33468 KiB |
| 01-012.txt |
AC |
73 ms |
33100 KiB |
| 01-013.txt |
AC |
247 ms |
33452 KiB |
| 01-014.txt |
AC |
209 ms |
33424 KiB |
| 01-015.txt |
AC |
163 ms |
33280 KiB |
| 01-016.txt |
AC |
234 ms |
33468 KiB |
| 01-017.txt |
AC |
450 ms |
33452 KiB |
| 01-018.txt |
AC |
31 ms |
32912 KiB |
| 01-019.txt |
AC |
66 ms |
32940 KiB |
| 01-020.txt |
AC |
80 ms |
32984 KiB |
| 01-021.txt |
AC |
25 ms |
32900 KiB |
| 01-022.txt |
AC |
123 ms |
33088 KiB |
| 01-023.txt |
AC |
451 ms |
33556 KiB |
| 01-024.txt |
AC |
373 ms |
33596 KiB |
| 01-025.txt |
AC |
359 ms |
33516 KiB |
| 01-026.txt |
AC |
390 ms |
33612 KiB |
| 01-027.txt |
AC |
481 ms |
33568 KiB |
| 01-028.txt |
AC |
435 ms |
33512 KiB |
| 01-029.txt |
AC |
536 ms |
33636 KiB |
| 01-030.txt |
AC |
441 ms |
33668 KiB |
| 01-031.txt |
AC |
555 ms |
33576 KiB |
| 01-032.txt |
AC |
520 ms |
33708 KiB |
| 01-033.txt |
AC |
508 ms |
33520 KiB |
| 01-034.txt |
AC |
434 ms |
33620 KiB |
| 01-035.txt |
AC |
543 ms |
33648 KiB |
| 01-036.txt |
AC |
506 ms |
33496 KiB |
| 01-037.txt |
AC |
498 ms |
33496 KiB |
| 01-038.txt |
AC |
435 ms |
33548 KiB |
| 01-039.txt |
AC |
536 ms |
33620 KiB |
| 01-040.txt |
AC |
504 ms |
33612 KiB |
| 01-041.txt |
AC |
414 ms |
33508 KiB |
| 01-042.txt |
AC |
479 ms |
33512 KiB |
| 01-043.txt |
AC |
399 ms |
33588 KiB |
| 01-044.txt |
AC |
459 ms |
33520 KiB |
| 01-045.txt |
AC |
467 ms |
33700 KiB |
| 01-046.txt |
AC |
364 ms |
33696 KiB |
| 01-047.txt |
AC |
352 ms |
33564 KiB |
| 01-048.txt |
AC |
395 ms |
33600 KiB |
| 01-049.txt |
AC |
476 ms |
33660 KiB |
| 01-050.txt |
AC |
428 ms |
33564 KiB |
| 01-051.txt |
AC |
525 ms |
33500 KiB |
| 01-052.txt |
AC |
426 ms |
33540 KiB |
| 01-053.txt |
AC |
551 ms |
33684 KiB |
| 01-054.txt |
AC |
509 ms |
33564 KiB |
| 01-055.txt |
AC |
505 ms |
33660 KiB |
| 01-056.txt |
AC |
433 ms |
33580 KiB |
| 01-057.txt |
AC |
549 ms |
33472 KiB |
| 01-058.txt |
AC |
491 ms |
33500 KiB |
| 01-059.txt |
AC |
495 ms |
33512 KiB |
| 01-060.txt |
AC |
425 ms |
33544 KiB |
| 01-061.txt |
AC |
549 ms |
33600 KiB |
| 01-062.txt |
AC |
488 ms |
33644 KiB |
| 01-063.txt |
AC |
413 ms |
33560 KiB |
| 01-064.txt |
AC |
490 ms |
33508 KiB |
| 01-065.txt |
AC |
390 ms |
33644 KiB |
| 01-066.txt |
AC |
469 ms |
33548 KiB |
| 01-067.txt |
AC |
459 ms |
33652 KiB |
| 01-068.txt |
AC |
529 ms |
33548 KiB |
| 01-069.txt |
AC |
507 ms |
33648 KiB |
| 01-070.txt |
AC |
507 ms |
33648 KiB |
| 01-071.txt |
AC |
481 ms |
33568 KiB |
| 01-072.txt |
AC |
516 ms |
33644 KiB |
| 01-073.txt |
AC |
482 ms |
33648 KiB |
| 01-074.txt |
AC |
487 ms |
33660 KiB |
| 01-075.txt |
AC |
489 ms |
33644 KiB |