답안 #402565

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
402565 2021-05-12T00:41:27 Z rrrr10000 From Hacks to Snitches (BOI21_watchmen) C++14
35 / 100
2385 ms 254136 KB
#include <bits/stdc++.h>
#pragma GCC target("avx")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
#define rep(i, n)  for(long long i=0;i<(long long)(n);i++)
#define REP(i,k,n) for(long long i=k;i<(long long)(n);i++)
#define pb emplace_back
#define lb(v,k) (lower_bound(all(v),(k))-v.begin())
#define ub(v,k) (upper_bound(all(v),(k))-v.begin())
#define fi first
#define se second
#define pi M_PI
#define PQ(T) priority_queue<T>
#define SPQ(T) priority_queue<T,vector<T>,greater<T>>
#define dame(a) {out(a);return 0;}
#define decimal cout<<fixed<<setprecision(15);
#define all(a) a.begin(),a.end()
#define rsort(a) {sort(all(a));reverse(all(a));}
#define dupli(a) {sort(all(a));a.erase(unique(all(a)),a.end());}
typedef long long ll;
typedef pair<ll,ll> P;
typedef tuple<ll,ll,ll> PP;
typedef tuple<ll,ll,ll,ll> PPP;
using vi=vector<ll>;
using vvi=vector<vi>;
using vvvi=vector<vvi>;
using vvvvi=vector<vvvi>;
using vp=vector<P>;
using vvp=vector<vp>;
using vb=vector<bool>;
using vvb=vector<vb>;
const ll inf=1001001001001001001;
const ll INF=1001001001;
const ll mod=998244353;
const double eps=1e-10;
template<class T> bool chmin(T&a,T b){if(a>b){a=b;return true;}return false;}
template<class T> bool chmax(T&a,T b){if(a<b){a=b;return true;}return false;}
template<class T> void out(T a){cout<<a<<'\n';}
template<class T> void outp(T a){cout<<'('<<a.fi<<','<<a.se<<')'<<'\n';}
template<class T> void outvp(T v){rep(i,v.size())cout<<'('<<v[i].fi<<','<<v[i].se<<')';cout<<'\n';}
template<class T> void outvvp(T v){rep(i,v.size())outvp(v[i]);}
template<class T> void outv(T v){rep(i,v.size()){if(i)cout<<' ';cout<<v[i];}cout<<'\n';}
template<class T> void outvv(T v){rep(i,v.size())outv(v[i]);}
template<class T> bool isin(T x,T l,T r){return (l)<=(x)&&(x)<=(r);}
template<class T> void yesno(T b){if(b)out("yes");else out("no");}
template<class T> void YesNo(T b){if(b)out("Yes");else out("No");}
template<class T> void YESNO(T b){if(b)out("YES");else out("NO");}
template<class T> void outset(T s){auto itr=s.begin();while(itr!=s.end()){if(itr!=s.begin())cout<<' ';cout<<*itr;itr++;}cout<<'\n';}
void outs(ll a,ll b){if(a>=inf-100)out(b);else out(a);}
ll gcd(ll a,ll b){if(b==0)return a;return gcd(b,a%b);}
ll modpow(ll a,ll b){ll res=1;a%=mod;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res;}
inline ll readll() {
    ll x = 0;
    int neg=1;
    char ch = getchar_unlocked();
    while (ch < '0' || ch > '9'){
        if(ch=='-')neg=-1;
        ch = getchar_unlocked();
    }
    while (ch >= '0' && ch <= '9'){
		x = (x << 3) + (x << 1) + ch - '0';
		ch = getchar_unlocked();
	}
    return x*neg;
}
int main(){
    ll n=readll(),m=readll();
    vvp g(n);
    rep(i,m){
        ll a=readll()-1,b=readll()-1;
        g[a].pb(b,i);g[b].pb(a,i);
    }
    ll k=readll();
    vi len(n,1),ngv(n,-1),nge(m,-1);
    vvp sp(n);
    rep(j,k){
        ll l=readll();
        vi v(l);
        rep(i,l)v[i]=readll()-1;
        rep(i,l){
            ngv[v[i]]=i;len[v[i]]=l;
            if(i==l-1&&l==2)break;
            sp[v[i]].pb(v[(i+1)%l],i);
            sp[v[(i+1)%l]].pb(v[i],i);
        }
    }
    rep(i,n)for(auto x:g[i]){
        for(auto&y:sp[i])if(y.fi==x.fi){
            nge[x.se]=y.se;
            y.se=x.se;
        }
    }


    vvi dis(n);
    rep(i,n)dis[i]=vi(len[i],inf);
    dis[0][0]=0;
    vi dis2(n,inf);
    SPQ(PP) pq;pq.emplace(0,0,0);
    while(!pq.empty()){
        ll cost,i,j;tie(cost,i,j)=pq.top();pq.pop();if(cost!=dis[i][j])continue;
        if(ngv[i]==(cost+1)%len[i]){
            for(auto x:g[i]){
                bool f=true;
                for(auto y:sp[i])if(x==y)f=false;
                if(!f)continue;
                ll nc=cost+1;
                if(ngv[x.fi]==nc%len[x.fi]){
                    if(ngv[x.fi]==(nc+len[i])%len[x.fi])nc=inf;
                    else nc+=len[i];
                }
                ll p=nc%len[x.fi];
                if(chmin(dis[x.fi][p],nc))pq.emplace(nc,x.fi,p);
            }
        }
        else if(chmin(dis2[i],cost)){
            for(auto x:g[i]){
                bool f=true;
                for(auto y:sp[i])if(x==y)f=false;
                if(!f)continue;
                ll nc=cost+1,p=nc%len[x.fi];
                if(ngv[x.fi]==p){
                    nc++;p++;if(p>=len[x.fi])p-=len[x.fi];
                }
                if(chmin(dis[x.fi][p],nc))pq.emplace(nc,x.fi,p);
            }
        }
        for(auto x:sp[i]){
            ll p0=cost%len[x.fi],p1=p0+1;if(p1>=len[x.fi])p1-=len[x.fi];
            if(nge[x.se]==p0)continue;
            if(ngv[x.fi]==p1)continue;
            if(chmin(dis[x.fi][p1],cost+1))pq.emplace(cost+1,x.fi,p1);
        }
        ll p1=(cost+1)%len[i],p2=p1+1;if(p2>=len[i])p2-=len[i];
        if(ngv[i]==p1){
            bool ok=false,ok2=false;
            for(auto x:g[i]){
                bool f=true;
                for(auto y:sp[i])if(x==y)f=false;
                if(!f)continue;
                if(ngv[x.fi]!=(cost+1)%len[x.fi])ok=true;
                if(ngv[x.fi]!=(cost+len[i]+1)%len[x.fi])ok2=true;
            }
            ll nc;
            if(ok)nc=cost+2;
            else if(ok2)nc=cost+len[i]+2;
            else nc=inf;
            if(chmin(dis[i][p2],nc))pq.emplace(nc,i,p2);
        }
        else if(chmin(dis[i][p1],cost+1))pq.emplace(cost+1,i,p1);
    }
    // outvv(dis);
    ll ans=inf;
    for(ll x:dis[n-1])chmin(ans,x);
    if(ans==inf)out("impossible");
    else out(ans);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 4556 KB Output is correct
2 Correct 98 ms 18564 KB Output is correct
3 Correct 78 ms 17680 KB Output is correct
4 Correct 93 ms 17796 KB Output is correct
5 Correct 3 ms 332 KB Output is correct
6 Correct 86 ms 17708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 4556 KB Output is correct
2 Correct 91 ms 18584 KB Output is correct
3 Correct 81 ms 17680 KB Output is correct
4 Correct 95 ms 17764 KB Output is correct
5 Correct 3 ms 332 KB Output is correct
6 Correct 93 ms 17680 KB Output is correct
7 Correct 84 ms 17520 KB Output is correct
8 Correct 74 ms 17500 KB Output is correct
9 Correct 72 ms 17348 KB Output is correct
10 Correct 79 ms 17796 KB Output is correct
11 Correct 86 ms 17580 KB Output is correct
12 Correct 85 ms 17648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 4556 KB Output is correct
2 Correct 91 ms 18584 KB Output is correct
3 Correct 81 ms 17680 KB Output is correct
4 Correct 95 ms 17764 KB Output is correct
5 Correct 3 ms 332 KB Output is correct
6 Correct 93 ms 17680 KB Output is correct
7 Correct 84 ms 17520 KB Output is correct
8 Correct 74 ms 17500 KB Output is correct
9 Correct 72 ms 17348 KB Output is correct
10 Correct 79 ms 17796 KB Output is correct
11 Correct 86 ms 17580 KB Output is correct
12 Correct 85 ms 17648 KB Output is correct
13 Correct 12 ms 4556 KB Output is correct
14 Correct 95 ms 18668 KB Output is correct
15 Correct 86 ms 17668 KB Output is correct
16 Correct 92 ms 17740 KB Output is correct
17 Correct 3 ms 332 KB Output is correct
18 Correct 87 ms 17720 KB Output is correct
19 Correct 87 ms 17524 KB Output is correct
20 Correct 76 ms 17548 KB Output is correct
21 Correct 90 ms 17356 KB Output is correct
22 Correct 86 ms 17800 KB Output is correct
23 Correct 78 ms 17584 KB Output is correct
24 Correct 78 ms 17636 KB Output is correct
25 Correct 1380 ms 198848 KB Output is correct
26 Correct 1362 ms 222992 KB Output is correct
27 Correct 1173 ms 198828 KB Output is correct
28 Correct 890 ms 209528 KB Output is correct
29 Correct 1585 ms 174280 KB Output is correct
30 Correct 1551 ms 185128 KB Output is correct
31 Correct 1420 ms 222160 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 4556 KB Output is correct
2 Correct 91 ms 18584 KB Output is correct
3 Correct 81 ms 17680 KB Output is correct
4 Correct 95 ms 17764 KB Output is correct
5 Correct 3 ms 332 KB Output is correct
6 Correct 93 ms 17680 KB Output is correct
7 Correct 84 ms 17520 KB Output is correct
8 Correct 74 ms 17500 KB Output is correct
9 Correct 72 ms 17348 KB Output is correct
10 Correct 79 ms 17796 KB Output is correct
11 Correct 86 ms 17580 KB Output is correct
12 Correct 85 ms 17648 KB Output is correct
13 Correct 12 ms 4556 KB Output is correct
14 Correct 95 ms 18668 KB Output is correct
15 Correct 86 ms 17668 KB Output is correct
16 Correct 92 ms 17740 KB Output is correct
17 Correct 3 ms 332 KB Output is correct
18 Correct 87 ms 17720 KB Output is correct
19 Correct 87 ms 17524 KB Output is correct
20 Correct 76 ms 17548 KB Output is correct
21 Correct 90 ms 17356 KB Output is correct
22 Correct 86 ms 17800 KB Output is correct
23 Correct 78 ms 17584 KB Output is correct
24 Correct 78 ms 17636 KB Output is correct
25 Correct 1380 ms 198848 KB Output is correct
26 Correct 1362 ms 222992 KB Output is correct
27 Correct 1173 ms 198828 KB Output is correct
28 Correct 890 ms 209528 KB Output is correct
29 Correct 1585 ms 174280 KB Output is correct
30 Correct 1551 ms 185128 KB Output is correct
31 Correct 1420 ms 222160 KB Output is correct
32 Correct 12 ms 4556 KB Output is correct
33 Correct 80 ms 18624 KB Output is correct
34 Correct 85 ms 17696 KB Output is correct
35 Correct 89 ms 17752 KB Output is correct
36 Correct 3 ms 332 KB Output is correct
37 Correct 86 ms 17700 KB Output is correct
38 Correct 76 ms 17560 KB Output is correct
39 Correct 76 ms 17544 KB Output is correct
40 Correct 75 ms 17344 KB Output is correct
41 Correct 83 ms 17804 KB Output is correct
42 Correct 85 ms 17540 KB Output is correct
43 Correct 78 ms 17676 KB Output is correct
44 Correct 1322 ms 198908 KB Output is correct
45 Correct 1277 ms 222868 KB Output is correct
46 Correct 1189 ms 198960 KB Output is correct
47 Correct 874 ms 209440 KB Output is correct
48 Correct 1554 ms 174376 KB Output is correct
49 Correct 1518 ms 185220 KB Output is correct
50 Correct 1374 ms 222060 KB Output is correct
51 Correct 1970 ms 215580 KB Output is correct
52 Correct 2385 ms 254136 KB Output is correct
53 Correct 1983 ms 216152 KB Output is correct
54 Correct 848 ms 171696 KB Output is correct
55 Correct 2327 ms 203032 KB Output is correct
56 Correct 2122 ms 185188 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 4556 KB Output is correct
2 Correct 98 ms 18564 KB Output is correct
3 Correct 78 ms 17680 KB Output is correct
4 Correct 93 ms 17796 KB Output is correct
5 Correct 3 ms 332 KB Output is correct
6 Correct 86 ms 17708 KB Output is correct
7 Correct 10 ms 4556 KB Output is correct
8 Correct 91 ms 18584 KB Output is correct
9 Correct 81 ms 17680 KB Output is correct
10 Correct 95 ms 17764 KB Output is correct
11 Correct 3 ms 332 KB Output is correct
12 Correct 93 ms 17680 KB Output is correct
13 Correct 84 ms 17520 KB Output is correct
14 Correct 74 ms 17500 KB Output is correct
15 Correct 72 ms 17348 KB Output is correct
16 Correct 79 ms 17796 KB Output is correct
17 Correct 86 ms 17580 KB Output is correct
18 Correct 85 ms 17648 KB Output is correct
19 Correct 1 ms 204 KB Output is correct
20 Correct 1 ms 204 KB Output is correct
21 Correct 1 ms 204 KB Output is correct
22 Correct 11 ms 5068 KB Output is correct
23 Correct 101 ms 19748 KB Output is correct
24 Correct 81 ms 18852 KB Output is correct
25 Correct 87 ms 18860 KB Output is correct
26 Correct 3 ms 332 KB Output is correct
27 Correct 80 ms 18852 KB Output is correct
28 Correct 76 ms 18684 KB Output is correct
29 Correct 76 ms 18628 KB Output is correct
30 Correct 75 ms 18528 KB Output is correct
31 Correct 81 ms 18980 KB Output is correct
32 Correct 81 ms 18716 KB Output is correct
33 Correct 95 ms 18820 KB Output is correct
34 Correct 1377 ms 210040 KB Output is correct
35 Correct 1408 ms 206744 KB Output is correct
36 Correct 1412 ms 206516 KB Output is correct
37 Correct 1229 ms 234112 KB Output is correct
38 Correct 1309 ms 237404 KB Output is correct
39 Correct 1575 ms 208652 KB Output is correct
40 Correct 1569 ms 208240 KB Output is correct
41 Correct 1562 ms 212284 KB Output is correct
42 Correct 1320 ms 220572 KB Output is correct
43 Incorrect 1025 ms 238416 KB Output isn't correct
44 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 4556 KB Output is correct
2 Correct 98 ms 18564 KB Output is correct
3 Correct 78 ms 17680 KB Output is correct
4 Correct 93 ms 17796 KB Output is correct
5 Correct 3 ms 332 KB Output is correct
6 Correct 86 ms 17708 KB Output is correct
7 Correct 10 ms 4556 KB Output is correct
8 Correct 91 ms 18584 KB Output is correct
9 Correct 81 ms 17680 KB Output is correct
10 Correct 95 ms 17764 KB Output is correct
11 Correct 3 ms 332 KB Output is correct
12 Correct 93 ms 17680 KB Output is correct
13 Correct 84 ms 17520 KB Output is correct
14 Correct 74 ms 17500 KB Output is correct
15 Correct 72 ms 17348 KB Output is correct
16 Correct 79 ms 17796 KB Output is correct
17 Correct 86 ms 17580 KB Output is correct
18 Correct 85 ms 17648 KB Output is correct
19 Correct 12 ms 4556 KB Output is correct
20 Correct 95 ms 18668 KB Output is correct
21 Correct 86 ms 17668 KB Output is correct
22 Correct 92 ms 17740 KB Output is correct
23 Correct 3 ms 332 KB Output is correct
24 Correct 87 ms 17720 KB Output is correct
25 Correct 87 ms 17524 KB Output is correct
26 Correct 76 ms 17548 KB Output is correct
27 Correct 90 ms 17356 KB Output is correct
28 Correct 86 ms 17800 KB Output is correct
29 Correct 78 ms 17584 KB Output is correct
30 Correct 78 ms 17636 KB Output is correct
31 Correct 1380 ms 198848 KB Output is correct
32 Correct 1362 ms 222992 KB Output is correct
33 Correct 1173 ms 198828 KB Output is correct
34 Correct 890 ms 209528 KB Output is correct
35 Correct 1585 ms 174280 KB Output is correct
36 Correct 1551 ms 185128 KB Output is correct
37 Correct 1420 ms 222160 KB Output is correct
38 Correct 1 ms 204 KB Output is correct
39 Correct 1 ms 204 KB Output is correct
40 Correct 1 ms 204 KB Output is correct
41 Correct 11 ms 5068 KB Output is correct
42 Correct 101 ms 19748 KB Output is correct
43 Correct 81 ms 18852 KB Output is correct
44 Correct 87 ms 18860 KB Output is correct
45 Correct 3 ms 332 KB Output is correct
46 Correct 80 ms 18852 KB Output is correct
47 Correct 76 ms 18684 KB Output is correct
48 Correct 76 ms 18628 KB Output is correct
49 Correct 75 ms 18528 KB Output is correct
50 Correct 81 ms 18980 KB Output is correct
51 Correct 81 ms 18716 KB Output is correct
52 Correct 95 ms 18820 KB Output is correct
53 Correct 1377 ms 210040 KB Output is correct
54 Correct 1408 ms 206744 KB Output is correct
55 Correct 1412 ms 206516 KB Output is correct
56 Correct 1229 ms 234112 KB Output is correct
57 Correct 1309 ms 237404 KB Output is correct
58 Correct 1575 ms 208652 KB Output is correct
59 Correct 1569 ms 208240 KB Output is correct
60 Correct 1562 ms 212284 KB Output is correct
61 Correct 1320 ms 220572 KB Output is correct
62 Incorrect 1025 ms 238416 KB Output isn't correct
63 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 4556 KB Output is correct
2 Correct 98 ms 18564 KB Output is correct
3 Correct 78 ms 17680 KB Output is correct
4 Correct 93 ms 17796 KB Output is correct
5 Correct 3 ms 332 KB Output is correct
6 Correct 86 ms 17708 KB Output is correct
7 Correct 10 ms 4556 KB Output is correct
8 Correct 91 ms 18584 KB Output is correct
9 Correct 81 ms 17680 KB Output is correct
10 Correct 95 ms 17764 KB Output is correct
11 Correct 3 ms 332 KB Output is correct
12 Correct 93 ms 17680 KB Output is correct
13 Correct 84 ms 17520 KB Output is correct
14 Correct 74 ms 17500 KB Output is correct
15 Correct 72 ms 17348 KB Output is correct
16 Correct 79 ms 17796 KB Output is correct
17 Correct 86 ms 17580 KB Output is correct
18 Correct 85 ms 17648 KB Output is correct
19 Correct 12 ms 4556 KB Output is correct
20 Correct 95 ms 18668 KB Output is correct
21 Correct 86 ms 17668 KB Output is correct
22 Correct 92 ms 17740 KB Output is correct
23 Correct 3 ms 332 KB Output is correct
24 Correct 87 ms 17720 KB Output is correct
25 Correct 87 ms 17524 KB Output is correct
26 Correct 76 ms 17548 KB Output is correct
27 Correct 90 ms 17356 KB Output is correct
28 Correct 86 ms 17800 KB Output is correct
29 Correct 78 ms 17584 KB Output is correct
30 Correct 78 ms 17636 KB Output is correct
31 Correct 1380 ms 198848 KB Output is correct
32 Correct 1362 ms 222992 KB Output is correct
33 Correct 1173 ms 198828 KB Output is correct
34 Correct 890 ms 209528 KB Output is correct
35 Correct 1585 ms 174280 KB Output is correct
36 Correct 1551 ms 185128 KB Output is correct
37 Correct 1420 ms 222160 KB Output is correct
38 Correct 12 ms 4556 KB Output is correct
39 Correct 80 ms 18624 KB Output is correct
40 Correct 85 ms 17696 KB Output is correct
41 Correct 89 ms 17752 KB Output is correct
42 Correct 3 ms 332 KB Output is correct
43 Correct 86 ms 17700 KB Output is correct
44 Correct 76 ms 17560 KB Output is correct
45 Correct 76 ms 17544 KB Output is correct
46 Correct 75 ms 17344 KB Output is correct
47 Correct 83 ms 17804 KB Output is correct
48 Correct 85 ms 17540 KB Output is correct
49 Correct 78 ms 17676 KB Output is correct
50 Correct 1322 ms 198908 KB Output is correct
51 Correct 1277 ms 222868 KB Output is correct
52 Correct 1189 ms 198960 KB Output is correct
53 Correct 874 ms 209440 KB Output is correct
54 Correct 1554 ms 174376 KB Output is correct
55 Correct 1518 ms 185220 KB Output is correct
56 Correct 1374 ms 222060 KB Output is correct
57 Correct 1970 ms 215580 KB Output is correct
58 Correct 2385 ms 254136 KB Output is correct
59 Correct 1983 ms 216152 KB Output is correct
60 Correct 848 ms 171696 KB Output is correct
61 Correct 2327 ms 203032 KB Output is correct
62 Correct 2122 ms 185188 KB Output is correct
63 Correct 1 ms 204 KB Output is correct
64 Correct 1 ms 204 KB Output is correct
65 Correct 1 ms 204 KB Output is correct
66 Correct 11 ms 5068 KB Output is correct
67 Correct 101 ms 19748 KB Output is correct
68 Correct 81 ms 18852 KB Output is correct
69 Correct 87 ms 18860 KB Output is correct
70 Correct 3 ms 332 KB Output is correct
71 Correct 80 ms 18852 KB Output is correct
72 Correct 76 ms 18684 KB Output is correct
73 Correct 76 ms 18628 KB Output is correct
74 Correct 75 ms 18528 KB Output is correct
75 Correct 81 ms 18980 KB Output is correct
76 Correct 81 ms 18716 KB Output is correct
77 Correct 95 ms 18820 KB Output is correct
78 Correct 1377 ms 210040 KB Output is correct
79 Correct 1408 ms 206744 KB Output is correct
80 Correct 1412 ms 206516 KB Output is correct
81 Correct 1229 ms 234112 KB Output is correct
82 Correct 1309 ms 237404 KB Output is correct
83 Correct 1575 ms 208652 KB Output is correct
84 Correct 1569 ms 208240 KB Output is correct
85 Correct 1562 ms 212284 KB Output is correct
86 Correct 1320 ms 220572 KB Output is correct
87 Incorrect 1025 ms 238416 KB Output isn't correct
88 Halted 0 ms 0 KB -