제출 #748172

#제출 시각아이디문제언어결과실행 시간메모리
748172vjudge1From Hacks to Snitches (BOI21_watchmen)C++17
5 / 100
1024 ms132548 KiB
#include<bits/stdc++.h> using namespace std; const int maxn=250000+10; vector<int>adj[maxn],allk[maxn]; int n,m,k,dp[130][maxn],inf=1e8+5,ki; vector<int>bf; int bad(int i){ i++; i%=ki; return i; } void solve(int len=0){ if(bf.size()==0){ return ; } for(auto x:bf){ dp[len%ki][x]=len; } vector<int>fake; for(auto x:bf){ for(auto y:adj[x]){ // cout<<x<<" "<<y<<" "<<len<<" "<<allk[1][bad(len)]<<"\n"; if(dp[bad(len)][y]==inf&&allk[1][bad(len)]!=y&&!(allk[1][len%ki]==y&&allk[1][bad(len)]==x)){ fake.push_back(y); dp[bad(len)][y]=len+1; } } } swap(bf,fake); return solve(len+1); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=0;i<130;i++){ for(int j=0;j<=n;j++){ dp[i][j]=inf; } } for(int i=0;i<m;i++){ int u,v; cin>>u>>v; adj[u].push_back(v); adj[v].push_back(u); } for(int i=1;i<=n;i++){ adj[i].push_back(i); } cin>>k; for(int i=1;i<=k;i++){ cin>>ki; allk[i].resize(ki); for(int j=0;j<ki;j++){ cin>>allk[i][j]; } } bf.push_back(1); solve(); int res=inf; for(int i=0;i<ki;i++){ res=min(res,dp[i][n]); } cout<<res<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...