이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "garden.h"
#include "gardenlib.h"
#include <bits/stdc++.h>
using namespace std;
const int MX=3e5+5;
pair<int,int> e[MX];
int b[MX];
int c[MX];
int nxt[MX];
pair<int,int> d[MX];
int visit[MX];
int ans[MX];
int p;
vector<int> dd[MX];
pair<int,int> f(int k){
if(d[k].first>=0)return d[k];
int u=e[k].first;
int v=e[k].second;
if(v==p)return {1,k};
auto ret=f(nxt[k]);
return d[k]={ret.first+1,ret.second};
}
void dfs(int v){
visit[v]=1;
for(auto u: dd[v]){
if(!visit[u])dfs(u);
}
}
void count_routes(int N, int M, int P, int R[][2], int Q, int G[])
{
p=P;
int i,j;
for(i=0 ; i<N ; i++)b[i]=c[i]=-1;
for(i=0 ; i<M ; i++){
int u=R[i][0];
int v=R[i][1];
e[i]={u,v};
e[M+i]={v,u};
if(b[u]==-1)b[u]=i;
else if(c[u]==-1)c[u]=i;
if(b[v]==-1)b[v]=M+i;
else if(c[v]==-1)c[v]=M+i;
}
for(i=0 ; i<M*2 ; i++){
int u=e[i].first;
int v=e[i].second;
int k=b[v];
int t=c[v];
if(t==-1){
nxt[i]=k;
dd[k].push_back(i);
continue;
}
if(e[k].second==u){
nxt[i]=t;
dd[t].push_back(i);
}
else {
nxt[i]=k;
dd[k].push_back(i);
}
}
for(i=0 ; i<M*2 ; i++){
if(e[i].second==P)dfs(i);
}
for(i=0 ; i<M*2 ;i++)d[i]={-1,-1};
for(i=0 ;i<M*2 ; i++){
/// cout<<e[i].first<<" "<<e[i].second<<" "<<visit[i]<<endl;
if(visit[i]==1)d[i]=f(i);
}
for(i=0 ; i<N ; i++){
int k=b[i];
int w=-1,e=-1,r=-1;
if(k>=0 && visit[k])
w=nxt[d[k].second];
if(w>=0 && visit[w])
e=nxt[d[w].second];
if(e>=0 && visit[e])
r=nxt[d[e].second];
if(w==-1)continue;
for(j=0 ; j<Q ; j++){
if(G[j]<d[k].first)continue;
if(G[j]==d[k].first){
ans[j]++;
continue;
}
if(w==e && e>=0){
if((G[j]-d[k].first)%d[w].first==0)ans[j]++;
}
else{
if(e<0 )continue;
if(G[j]<d[k].first+d[w].first)continue;
if(G[j]==d[k].first+d[w].first){
ans[j]++;
continue;
}
if(r<0)continue;
if(e==r){
if((G[j]-d[k].first-d[w].first)%d[e].first==0)ans[j]++;
}
else{
if((G[j]-d[k].first)%(d[w].first+d[e].first)==0 || (G[j]-d[k].first)%(d[w].first+d[e].first)==d[w].first)ans[j]++;
}
}
}
}
for(i=0 ; i<Q ; i++)
answer(ans[i]);
}
컴파일 시 표준 에러 (stderr) 메시지
garden.cpp: In function 'std::pair<int, int> f(int)':
garden.cpp:17:9: warning: unused variable 'u' [-Wunused-variable]
17 | int u=e[k].first;
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |