QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#665232 | #8237. Sugar Sweet II | OIer_kzc# | TL | 87ms | 26328kb | C++17 | 2.4kb | 2024-10-22 10:12:50 | 2024-10-22 10:12:51 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
#define p 1000000007
#define ll long long
int read(){
int u=0;
char c=getchar();
while(c>'9'||c<'0')c=getchar();
while(c>='0'&&c<='9'){
u=u*10+c-48;
c=getchar();
}
return u;
}
int ksm(int x,int y){
if(!x)return 1;
ll u=ksm(x/2,y);
u=u*u%p;
if(x&1)u=u*y%p;
return u;
}
int n;
int a[500011],b[500011],w[500011],cb[500011];
int jc[500011],ny[500011],bz[500011],dis[500011];
vector<int>R[500011];
int ls[500011];
int d[500011];
void solve(){
n=read();
fo(i,1,n)bz[i]=dis[i]=cb[i]=0,R[i].clear();
fo(i,1,n)a[i]=read();
fo(i,1,n)b[i]=read(),R[b[i]].push_back(i);
fo(i,1,n)w[i]=read();
fo(i,1,n){
if(R[i].size()&&!bz[i]){
if(b[i]==i){
bz[i]=1;
continue;
}
int t=b[i],u=0;
if(a[b[i]]>a[i])u=i;
bz[i]=1;
ls[t]=i;
while(t!=i){
if(a[b[t]]>a[t])u=t;
bz[t]=1;
ls[b[t]]=t;
t=b[t];
}
if(!u)continue;
dis[u]=1;
t=ls[u];
while(t!=u){
if(a[b[t]]>a[t])dis[t]=1;
else if(a[b[t]]+w[b[t]]>a[t]&&dis[b[t]])dis[t]=dis[b[t]]+1;
t=ls[t];
}
}
}
fo(i,1,n)ls[i]=0;
fo(i,1,n){
fo(j,0,(int)R[i].size()-1){
if(!bz[R[i][j]]){
ls[i]=R[i][j];
cb[R[i][j]]++;
}
}
}
int h=0;
fo(i,1,n){
if(!cb[i])d[++d[0]]=i;
}
while(h<d[0]){
int t=d[++h];
if(!dis[t]){
if(a[b[t]]>a[t])dis[t]=1;
else if(a[b[t]]+w[b[t]]>a[t]&&dis[b[t]])dis[t]=dis[b[t]]+1;
}
if(ls[t]){
cb[ls[t]]--;
if(!cb[ls[t]]){
d[++d[0]]=ls[t];
}
}
}
ny[0]=0;
fo(i,1,n){
ll ans=a[i]+(ll)w[i]*ny[dis[i]]%p;
ans%=p;
printf("%lld ",ans);
}
puts("");
}
int main(){
jc[0]=ny[0]=1;
fo(i,1,5e5){
jc[i]=(ll)jc[i-1]*i%p;
ny[i]=ksm(p-2,jc[i]);
}
int T=read();
while(T){
--T;
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 87ms
memory: 26328kb
input:
4 4 2 5 5 2 4 2 1 3 3 2 1 4 3 5 4 3 1 1 1 6 6 6 3 5 4 3 2 3 1 1 2 3 5 2 1 3 2 1 5 1 1 3 4 1 3 4 2 4
output:
500000007 5 5 6 5 10 9 166666673 5 6 500000006 4 3 4 5
result:
ok 15 numbers
Test #2:
score: -100
Time Limit Exceeded
input:
50000 5 508432375 168140163 892620793 578579275 251380640 3 4 4 1 3 346232959 736203130 186940774 655629320 607743104 1 863886789 1 364158084 18 864679185 463975750 558804051 604216585 694033700 499417132 375390750 337590759 467353355 111206671 983760005 984444619 322277587 138763925 205122047 97736...