QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#761317 | #9533. Classical Counting Problem | scallionsong | 0 | 915ms | 21804kb | C++14 | 5.8kb | 2024-11-18 22:00:58 | 2024-11-18 22:00:58 |
Judging History
answer
bool M1;
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define uint unsigned int
#define ll long long
#define ull unsigned long long
#define LL __int128
#define db double
#define LD long double
#define Pii pair<int,int>
#define Pll pair<ll,ll>
#define Pull pair<ull,ull>
#define Pdb pair<db,db>
#define fir first
#define sec second
#define vec vector<int>
#define pb push_back
#define qlr cerr<<"qlr\n"
#define dyh cerr<<"dyh\n"
#define pc(x) __builtin_popcount(x)
#define uni(x,y) uniform_int_distribution<int>(x,y)(rng)
#define unl(x,y) uniform_int_distribution<ll>(x,y)(rng)
#define unr(x,y) uniform_real_distribution<double>(x,y)(rng)
#define F(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define UF(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define look_memory cerr<<'\n'<<abs(&M1-&M2)/1024.0/1024<<'\n'
#define look_time cerr<<'\n'<<clock()*1.0/CLOCKS_PER_SEC<<'\n'
mt19937 rng(time(0)^(*new int));
const int INF=0x3f3f3f3f;
const int Mod=998244353;
template<typename T>
inline void inc(T &a,T b){
if(b<0) b+=Mod;
a+=b;
if(a>=Mod) a-=Mod;
}
template<typename T>
inline void dec(T &a,T b){
if(b<0) b+=Mod;
a-=b;
if(a<0) a+=Mod;
}
template<typename T>
inline void muc(T &a,T b){
a=a*b%Mod;
}
template<typename T>
inline bool chkmin(T &a,T b){
if(a<=b) return false;
a=b;
return true;
}
template<typename T>
inline bool chkmax(T &a,T b){
if(a>=b) return false;
a=b;
return true;
}
int T,n;
uint ans;
vec e[100010];
struct Dsu{
#define N 100000
int fa[N+10];
void init(int n){
F(i,1,n) fa[i]=i;
}
int fd(int x){
return fa[x]==x?x:fa[x]=fd(fa[x]);
}
void merge(int x,int y){
x=fd(x),y=fd(y);
fa[x]=y;
}
#undef N
}dsu;
struct Tree{
#define N 100000
int n,rt;
int fth[N+10],siz[N+10],son[N+10],top[N+10],dfn[N+10];
vec e[N+10];
void dfs1(int u,int fa){
fth[u]=fa;
siz[u]=1;
son[u]=0;
for(auto v:e[u]){
if(v==fa) continue;
dfs1(v,u);
siz[u]+=siz[v];
if(siz[v]>siz[son[u]]) son[u]=v;
}
}
void dfs2(int u,int fa,int topf){
top[u]=topf;
dfn[u]=++dfn[0];
if(son[u]) dfs2(son[u],u,topf);
for(auto v:e[u]){
if(v==fa||v==son[u]) continue;
dfs2(v,u,v);
}
}
void build(){
dfs1(rt,0);
dfs2(rt,0,rt);
dfn[0]=0;
}
vec get_chain(int x){
vec res;
while(x){
res.pb(x);
x=son[x];
}
return res;
}
#undef N
}T1,T2;
struct Seg{
#define N 100000
#define ls k*2
#define rs k*2+1
uint a[N+10];
uint w1[N*4+10],w2[N*4+10],w3[N*4+10],tag[N*4+10];//b,a*c,a*b*c
void update(int k){
w1[k]=w1[ls]+w1[rs];
w2[k]=w2[ls]+w2[rs];
w3[k]=w3[ls]+w3[rs];
}
void down(int k){
if(tag[k]){
w1[ls]+=tag[k];
w3[ls]+=w2[ls]*tag[k];
tag[ls]+=tag[k];
w1[rs]+=tag[k];
w3[rs]+=w2[rs]*tag[k];
tag[rs]+=tag[k];
tag[k]=0;
}
}
void build(int k,int L,int R){
w1[k]=0,w2[k]=0,tag[k]=0;
if(L==R) return;
int mid=(L+R)>>1;
build(ls,L,mid);
build(rs,mid+1,R);
}
void change1(int k,int L,int R,int x,int y){
if(L==R){
w2[k]=a[L]*y;
w3[k]=w1[k]*w2[k];
return;
}
down(k);
int mid=(L+R)>>1;
if(x<=mid) change1(ls,L,mid,x,y);
else change1(rs,mid+1,R,x,y);
update(k);
}
void change2(int k,int L,int R,int x,int y,int z){
if(L==R){
w3[k]+=w2[k]*z;
tag[k]+=z;
return;
}
down(k);
int mid=(L+R)>>1;
if(x<=mid) change2(ls,L,mid,x,y,z);
if(y>mid) change2(rs,mid+1,R,x,y,z);
update(k);
}
uint query(int k,int L,int R,int x,int y){
if(L>=x&&R<=y) return w3[k];
down(k);
int mid=(L+R)>>1;
if(y<=mid) return query(ls,L,mid,x,y);
else if(x>mid) return query(rs,mid+1,R,x,y);
else return query(ls,L,mid,x,y)+query(rs,mid+1,R,x,y);
}
#undef N
#undef ls
#undef rs
}seg;
void add(int x){
seg.change1(1,1,n,T2.dfn[x],1);
while(x){
seg.change2(1,1,n,T2.dfn[T2.top[x]],T2.dfn[x],1);
x=T2.fth[T2.top[x]];
}
}
void del(int x){
seg.change1(1,1,n,T2.dfn[x],0);
while(x){
seg.change2(1,1,n,T2.dfn[T2.top[x]],T2.dfn[x],-1);
x=T2.fth[T2.top[x]];
}
}
void dfs1(int u,int fa){
add(u);
for(auto v:T1.e[u]){
if(v==fa) continue;
dfs1(v,u);
}
}
void dfs2(int u,int fa){
del(u);
for(auto v:T1.e[u]){
if(v==fa) continue;
dfs2(v,u);
}
}
uint query(int x){
uint res=0;
while(x){
res+=seg.query(1,1,n,T2.dfn[T2.top[x]],T2.dfn[x]);
x=T2.fth[T2.top[x]];
}
return res;
}
void solve(){
cin>>n;
F(i,1,n) e[i].clear();
F(i,1,n-1){
int x,y;
cin>>x>>y;
e[x].pb(y);
e[y].pb(x);
}
T1.n=n,T1.rt=1;
F(i,1,n) T1.e[i].clear();
dsu.init(n);
UF(i,n,1){
for(auto j:e[i]){
if(j<i) continue;
T1.e[i].pb(dsu.fd(j));
dsu.merge(j,i);
}
}
T2.n=n,T2.rt=n;
F(i,1,n) T2.e[i].clear();
dsu.init(n);
F(i,1,n){
for(auto j:e[i]){
if(j>i) continue;
T2.e[i].pb(dsu.fd(j));
dsu.merge(j,i);
}
}
T1.build();
T2.build();
ans=0;
F(i,1,n) seg.a[T2.dfn[i]]=i;
seg.build(1,1,n);
F(i,1,n){
if(T1.top[i]!=i) continue;
vec V=T1.get_chain(i);
reverse(V.begin(),V.end());
for(auto j:V){
add(j);
for(auto k:T1.e[j]){
if(k!=T1.fth[j]&&k!=T1.son[j]) dfs1(k,j);
}
ans+=j*query(j);
}
for(auto j:V){
del(j);
for(auto k:T1.e[j]){
if(k!=T1.fth[j]&&k!=T1.son[j]) dfs2(k,j);
}
}
}
cout<<ans<<'\n';
}
bool M2;
int main(){
// freopen("ex_a4.in","r",stdin);
// freopen("monotone.out","w",stdout);
srand(time(0)^(*new int));
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>T;
while(T--) solve();
look_memory;
look_time;
return 0;
}
/*
1
3
1 3
2 3
6
3
1 2
2 3
3
1 3
2 3
7
2 1
3 1
4 1
5 1
6 5
7 6
6
2 1
3 1
4 1
5 4
6 1
9
2 1
3 2
4 3
5 1
6 4
7 5
8 2
9 3
9
2 1
3 2
4 3
5 4
6 5
7 2
8 3
9 5
*/
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 35ms
memory: 21244kb
input:
10000 10 10 2 5 2 7 2 1 7 4 10 6 2 3 7 9 7 8 5 10 6 5 1 6 9 5 4 6 3 1 7 5 2 4 8 4 10 5 10 7 6 1 6 4 1 3 4 5 1 9 1 8 7 10 6 2 8 10 8 7 5 7 9 7 3 5 4 3 2 4 6 8 1 7 10 4 10 10 3 2 3 9 2 1 2 4 2 6 4 5 4 7 4 8 4 10 6 1 3 6 7 6 5 6 9 7 2 5 4 1 10 9 8 6 10 3 5 6 5 1 6 10 3 4 1 7 1 8 1 9 3 2 10 10 9 10 3 9 ...
output:
1312 1581 1137 2292 1055 3707 840 2594 1008 3113 739 1646 1368 2019 1187 1236 2185 2238 1631 1989 1842 3264 1801 955 1543 3445 2041 1396 1738 857 1373 2082 1701 2325 1022 1491 1438 1782 1232 1650 2007 1786 2183 1096 1248 1637 785 1007 1734 1223 2595 785 3433 1403 1533 1774 3420 1890 2161 2616 1315 1...
result:
wrong answer 1st lines differ - expected: '1592', found: '1312'
Subtask #2:
score: 0
Wrong Answer
Test #2:
score: 0
Wrong Answer
time: 54ms
memory: 20148kb
input:
5000 20 20 19 7 20 16 19 2 7 15 16 13 2 11 7 6 2 14 2 12 15 5 14 17 2 4 20 3 6 18 20 10 5 1 16 9 14 8 15 20 7 17 15 7 10 17 13 7 18 10 9 17 6 18 16 18 14 16 1 10 19 17 3 18 2 13 8 19 5 1 11 14 20 8 4 18 12 11 20 20 1 17 1 18 20 3 1 9 18 16 18 10 18 12 18 6 9 5 16 19 18 4 5 11 17 14 18 15 17 7 6 13 7...
output:
19906 24302 32103 17764 13163 17271 43913 39052 15529 17543 18263 17892 19638 12424 11443 15766 17207 28490 10835 42747 10379 28174 9356 29569 9864 11860 34763 26714 15696 18970 25924 17918 16129 17344 14493 12360 22273 14592 13593 14979 9108 16373 13836 42802 20906 10801 23852 11312 12218 14944 212...
result:
wrong answer 1st lines differ - expected: '20721', found: '19906'
Subtask #3:
score: 0
Wrong Answer
Test #4:
score: 0
Wrong Answer
time: 71ms
memory: 21804kb
input:
2500 40 29 30 24 29 36 29 7 24 18 36 4 18 21 24 17 21 1 17 14 30 19 24 34 19 12 34 11 30 23 30 16 34 38 14 35 24 27 29 20 34 3 17 22 17 31 21 26 14 5 14 2 20 15 16 39 4 37 38 10 3 25 22 33 29 32 10 13 35 9 18 8 2 6 23 40 34 28 7 40 32 10 33 32 2 32 7 10 22 7 21 10 31 22 40 32 37 32 25 22 16 22 39 10...
output:
495194 285393 93176 166378 155042 365317 495027 111197 190310 84806 168172 210961 379670 125003 381652 105293 207293 278300 175330 157307 199275 114144 102629 289257 285319 210791 284875 111604 320311 90330 159872 293403 198787 167044 297911 300373 302631 315902 146816 156698 321405 356356 232619 29...
result:
wrong answer 1st lines differ - expected: '810633', found: '495194'
Subtask #4:
score: 0
Wrong Answer
Test #8:
score: 0
Wrong Answer
time: 146ms
memory: 20552kb
input:
500 200 63 7 145 63 78 145 103 63 163 7 97 163 57 7 186 78 30 145 25 57 56 97 112 25 50 7 162 50 105 112 126 57 32 126 95 105 188 105 124 112 86 186 82 162 143 162 194 95 183 97 101 82 197 82 200 186 96 143 146 124 164 197 54 95 195 57 131 143 130 146 193 112 36 97 16 163 62 193 93 124 121 96 1 96 1...
output:
81520674 60752260 33528594 178372891 157395321 100953574 71915361 91277324 152020937 66292577 196139564 69047929 71795551 161486330 128892583 79411884 90455851 168218287 89228040 102778175 108591128 80862264 90859459 102541558 220767642 99768495 128065429 63165016 53914467 112557695 60521022 9983533...
result:
wrong answer 1st lines differ - expected: '126443395', found: '81520674'
Subtask #5:
score: 0
Wrong Answer
Test #13:
score: 0
Wrong Answer
time: 915ms
memory: 20968kb
input:
33 3000 1322 1797 2442 1797 626 2442 1979 2442 485 1979 1428 1979 2196 1979 1499 1797 1936 2442 2921 1979 751 1499 2182 2921 979 1499 935 1979 1136 485 1880 1797 1084 2921 349 751 482 349 1009 979 1003 349 2056 482 2959 1136 1288 751 496 2442 1693 935 2045 1499 868 1009 1264 1428 2891 868 1045 1288 ...
output:
3484656904 3375594481 3986040462 2683925645 2603897830 2911674516 3766223533 940844005 3485967305 3167583245 1836716657 562214061 513670860 3780663808 1921690830 2454258849 2524042330 3068109349 3234493125 2942968394 2863681163 1898307844 568242919 2557561907 682419267 936683860 4285631096 254197217...
result:
wrong answer 1st lines differ - expected: '3914500827', found: '3484656904'
Subtask #6:
score: 0
Time Limit Exceeded
Test #18:
score: 0
Time Limit Exceeded
input:
1 98303 65520 65521 65521 65519 65519 65522 65522 65517 65517 65518 65518 65516 65516 65523 65523 65513 65513 65514 65514 65512 65512 65515 65515 65510 65510 65511 65511 65509 65509 65524 65524 65505 65505 65506 65506 65504 65504 65507 65507 65502 65502 65503 65503 65501 65501 65508 65508 65498 6549...
output:
result:
Subtask #7:
score: 0
Time Limit Exceeded
Test #22:
score: 0
Time Limit Exceeded
input:
1 100000 16150 88283 9425 88283 87988 88283 52935 88283 69816 88283 51311 88283 6910 9425 59991 87988 54743 6910 19614 52935 22926 69816 91163 88283 17233 19614 64177 19614 92097 91163 57414 9425 96321 6910 17859 54743 59810 69816 66565 17859 9948 96321 84506 59810 3928 64177 63031 54743 6214 87988 ...