답안 #406136

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
406136 2021-05-17T08:44:56 Z errorgorn From Hacks to Snitches (BOI21_watchmen) C++17
25 / 100
6000 ms 159912 KB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ii pair<int,int>
#define iii pair<int,ii>
#define fi first
#define se second
#define endl '\n'

#define puf push_front
#define pof pop_front
#define pub push_back
#define pob pop_back

#define rep(x,s,e) for (auto x=s-(s>e);x!=e-(s>e);(s<e)?x++:x--)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int) (x).size()

int n,m,k;
vector<ii> edges;

vector<int> w[250005]; //period is implicit here
vector<int> al[250005];

int id[250005]; //which watchmen
int bad[250005]; //when the watchmen comes
int ped[250005];

vector<ii> dial[1000005];

void read(int &x){
	x=0;
	char ch=getchar_unlocked();
	while (ch&16){
		x=(x<<3)+(x<<1)+(ch&15);
		ch=getchar_unlocked();
	}
}

int fix(int i,int j){
	i%=j;
	if (i<0) i+=j;
	return i;
}

void upd(int k,int i,int j){
	if (w[i][j]>k){
		w[i][j]=k;
		//pq.push(iii(k,ii(i,j)));
		if (k>1000000) return;
		dial[k].pub(ii(i,j));
	}
}

int main(){
	cin.tie(0);
	cout.tie(0);
	cin.sync_with_stdio(false);
	
	read(n),read(m);
	
	int a,b;
	rep(x,0,m){
		read(a),read(b);
		al[a].pub(b);
		al[b].pub(a);
	}
	
	memset(ped,-1,sizeof(ped));
	memset(id,-1,sizeof(id));
	memset(bad,-1,sizeof(bad));
	
	read(k);
	rep(x,0,k){
		read(a);
		
		vector<int> path;
		rep(y,0,a){
			read(b);
			
			path.pub(b);
			bad[b]=y;
			id[b]=x;
			ped[b]=a;
		}
	}
	
	rep(x,1,n+1){
		if (ped[x]==-1) w[x].pub(1e9);
		else{
			rep(y,0,ped[x]) w[x].pub(1e9);
		}
	}
	
	upd(0,1,0);
	
	int weight=0;
	while (weight<1000000){
		if (dial[weight].empty()){
			weight++;
			continue;
		}
		
		int n1,n2;
		tie(n1,n2)=dial[weight].back();
		dial[weight].pob();
		
		if (w[n1][n2]!=weight) continue;
		if (ped[n1]!=-1 && weight%ped[n1]==bad[n1]) continue;
		//same position as watchmen
		
		if (n1==n){
			cout<<weight<<endl;
			return 0;
		}
		
		//cout<<weight<<" "<<n1<<" "<<n2<<" "<<ped[n1]<<" "<<bad[n1]<<endl;
		
		for (int x=0;x<sz(al[n1]);x++){
			auto it=al[n1][x];
			
			if (ped[it]==-1){
				//normal dijkstra into node without period
				int ww=weight;
				if (n1<=n) ww++;
				upd(ww,it,0);
				
				//delete the edge
				swap(al[n1][x],al[n1].back());
				al[n1].pob();
				x--;
			}
			else if (ped[n1]==-1 && ped[it]!=-1){
				//node without period into node with period
				int ww=weight+1;
				upd(ww,it,ww%ped[it]);
				
				//also need one that lands immediately after watchmen pass
				ww=weight+fix(bad[it]-weight,ped[it])+1;
				upd(ww,it,ww%ped[it]);
			}
			else if (id[n1]==id[it]){
				//same watchmen
				int ww=weight+1;
				
				if ((bad[it]+1)%ped[it]==bad[n1] && ww%ped[it]==bad[n1]) continue;
				upd(ww,it,ww%ped[it]);
			}
			else{
				//different watchmen
				
				//time that watchmen on other side steps on it
				int tt=weight+fix(bad[it]-weight,ped[it]);
				
				if (tt%ped[n1]==bad[n1]){ //cannot come back to our side
					upd(weight+1,it,weight%ped[it]);
				}
				else{ //ok we can update all it
					upd(weight+1,it,weight%ped[it]);
					upd(tt+1,it,(tt+1)%ped[it]);
					
					//delete the edge
					swap(al[n1][x],al[n1].back());
					al[n1].pob();
					x--;
				}
			}
		}
		
		if (ped[n1]!=-1){
			upd(weight+1,n1,(n2+1)%ped[n1]);
		}
	}
	
	
	/*
	rep(x,1,IDX){
		cout<<x<<": ";
		for (auto &it:w[x]) cout<<it<<" "; cout<<endl;
	}
	//*/
	
	cout<<"impossible"<<endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39884 KB Output is correct
2 Correct 92 ms 48484 KB Output is correct
3 Correct 84 ms 47172 KB Output is correct
4 Correct 105 ms 46660 KB Output is correct
5 Correct 21 ms 38536 KB Output is correct
6 Correct 93 ms 46928 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39460 KB Output is correct
2 Correct 93 ms 48344 KB Output is correct
3 Correct 83 ms 47104 KB Output is correct
4 Correct 118 ms 46996 KB Output is correct
5 Correct 22 ms 38504 KB Output is correct
6 Correct 107 ms 46868 KB Output is correct
7 Correct 96 ms 47180 KB Output is correct
8 Correct 86 ms 47316 KB Output is correct
9 Correct 81 ms 47428 KB Output is correct
10 Correct 87 ms 46220 KB Output is correct
11 Correct 79 ms 45636 KB Output is correct
12 Correct 89 ms 46808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39460 KB Output is correct
2 Correct 93 ms 48344 KB Output is correct
3 Correct 83 ms 47104 KB Output is correct
4 Correct 118 ms 46996 KB Output is correct
5 Correct 22 ms 38504 KB Output is correct
6 Correct 107 ms 46868 KB Output is correct
7 Correct 96 ms 47180 KB Output is correct
8 Correct 86 ms 47316 KB Output is correct
9 Correct 81 ms 47428 KB Output is correct
10 Correct 87 ms 46220 KB Output is correct
11 Correct 79 ms 45636 KB Output is correct
12 Correct 89 ms 46808 KB Output is correct
13 Correct 29 ms 39876 KB Output is correct
14 Correct 104 ms 48504 KB Output is correct
15 Correct 84 ms 47172 KB Output is correct
16 Correct 107 ms 46732 KB Output is correct
17 Correct 23 ms 38604 KB Output is correct
18 Correct 90 ms 46948 KB Output is correct
19 Correct 96 ms 47136 KB Output is correct
20 Correct 84 ms 47296 KB Output is correct
21 Correct 83 ms 47356 KB Output is correct
22 Correct 88 ms 46176 KB Output is correct
23 Correct 84 ms 45596 KB Output is correct
24 Correct 85 ms 46776 KB Output is correct
25 Correct 1548 ms 93028 KB Output is correct
26 Correct 1574 ms 98000 KB Output is correct
27 Correct 1459 ms 93900 KB Output is correct
28 Correct 962 ms 98616 KB Output is correct
29 Correct 1456 ms 86332 KB Output is correct
30 Correct 1499 ms 88392 KB Output is correct
31 Correct 1736 ms 95204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39460 KB Output is correct
2 Correct 93 ms 48344 KB Output is correct
3 Correct 83 ms 47104 KB Output is correct
4 Correct 118 ms 46996 KB Output is correct
5 Correct 22 ms 38504 KB Output is correct
6 Correct 107 ms 46868 KB Output is correct
7 Correct 96 ms 47180 KB Output is correct
8 Correct 86 ms 47316 KB Output is correct
9 Correct 81 ms 47428 KB Output is correct
10 Correct 87 ms 46220 KB Output is correct
11 Correct 79 ms 45636 KB Output is correct
12 Correct 89 ms 46808 KB Output is correct
13 Correct 29 ms 39876 KB Output is correct
14 Correct 104 ms 48504 KB Output is correct
15 Correct 84 ms 47172 KB Output is correct
16 Correct 107 ms 46732 KB Output is correct
17 Correct 23 ms 38604 KB Output is correct
18 Correct 90 ms 46948 KB Output is correct
19 Correct 96 ms 47136 KB Output is correct
20 Correct 84 ms 47296 KB Output is correct
21 Correct 83 ms 47356 KB Output is correct
22 Correct 88 ms 46176 KB Output is correct
23 Correct 84 ms 45596 KB Output is correct
24 Correct 85 ms 46776 KB Output is correct
25 Correct 1548 ms 93028 KB Output is correct
26 Correct 1574 ms 98000 KB Output is correct
27 Correct 1459 ms 93900 KB Output is correct
28 Correct 962 ms 98616 KB Output is correct
29 Correct 1456 ms 86332 KB Output is correct
30 Correct 1499 ms 88392 KB Output is correct
31 Correct 1736 ms 95204 KB Output is correct
32 Correct 33 ms 39820 KB Output is correct
33 Correct 93 ms 48560 KB Output is correct
34 Correct 99 ms 47164 KB Output is correct
35 Correct 118 ms 46768 KB Output is correct
36 Correct 21 ms 38580 KB Output is correct
37 Correct 82 ms 46884 KB Output is correct
38 Correct 89 ms 47256 KB Output is correct
39 Correct 91 ms 47268 KB Output is correct
40 Correct 92 ms 47328 KB Output is correct
41 Correct 86 ms 46176 KB Output is correct
42 Correct 88 ms 45580 KB Output is correct
43 Correct 81 ms 46848 KB Output is correct
44 Correct 1496 ms 92452 KB Output is correct
45 Correct 1457 ms 97480 KB Output is correct
46 Correct 1452 ms 93248 KB Output is correct
47 Correct 977 ms 97876 KB Output is correct
48 Correct 1390 ms 85668 KB Output is correct
49 Correct 1455 ms 87312 KB Output is correct
50 Correct 1712 ms 95160 KB Output is correct
51 Correct 1842 ms 127452 KB Output is correct
52 Correct 1973 ms 159912 KB Output is correct
53 Correct 1737 ms 127648 KB Output is correct
54 Correct 876 ms 93012 KB Output is correct
55 Execution timed out 6080 ms 100616 KB Time limit exceeded
56 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39884 KB Output is correct
2 Correct 92 ms 48484 KB Output is correct
3 Correct 84 ms 47172 KB Output is correct
4 Correct 105 ms 46660 KB Output is correct
5 Correct 21 ms 38536 KB Output is correct
6 Correct 93 ms 46928 KB Output is correct
7 Correct 28 ms 39460 KB Output is correct
8 Correct 93 ms 48344 KB Output is correct
9 Correct 83 ms 47104 KB Output is correct
10 Correct 118 ms 46996 KB Output is correct
11 Correct 22 ms 38504 KB Output is correct
12 Correct 107 ms 46868 KB Output is correct
13 Correct 96 ms 47180 KB Output is correct
14 Correct 86 ms 47316 KB Output is correct
15 Correct 81 ms 47428 KB Output is correct
16 Correct 87 ms 46220 KB Output is correct
17 Correct 79 ms 45636 KB Output is correct
18 Correct 89 ms 46808 KB Output is correct
19 Correct 22 ms 38460 KB Output is correct
20 Correct 21 ms 38396 KB Output is correct
21 Correct 25 ms 38480 KB Output is correct
22 Correct 31 ms 39884 KB Output is correct
23 Correct 101 ms 48824 KB Output is correct
24 Correct 84 ms 47348 KB Output is correct
25 Correct 122 ms 47004 KB Output is correct
26 Correct 23 ms 38512 KB Output is correct
27 Correct 91 ms 47152 KB Output is correct
28 Correct 78 ms 47640 KB Output is correct
29 Correct 80 ms 47532 KB Output is correct
30 Correct 80 ms 47676 KB Output is correct
31 Correct 93 ms 46372 KB Output is correct
32 Correct 77 ms 45856 KB Output is correct
33 Correct 81 ms 46968 KB Output is correct
34 Correct 1496 ms 91112 KB Output is correct
35 Correct 1705 ms 85128 KB Output is correct
36 Incorrect 1648 ms 87220 KB Output isn't correct
37 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39884 KB Output is correct
2 Correct 92 ms 48484 KB Output is correct
3 Correct 84 ms 47172 KB Output is correct
4 Correct 105 ms 46660 KB Output is correct
5 Correct 21 ms 38536 KB Output is correct
6 Correct 93 ms 46928 KB Output is correct
7 Correct 28 ms 39460 KB Output is correct
8 Correct 93 ms 48344 KB Output is correct
9 Correct 83 ms 47104 KB Output is correct
10 Correct 118 ms 46996 KB Output is correct
11 Correct 22 ms 38504 KB Output is correct
12 Correct 107 ms 46868 KB Output is correct
13 Correct 96 ms 47180 KB Output is correct
14 Correct 86 ms 47316 KB Output is correct
15 Correct 81 ms 47428 KB Output is correct
16 Correct 87 ms 46220 KB Output is correct
17 Correct 79 ms 45636 KB Output is correct
18 Correct 89 ms 46808 KB Output is correct
19 Correct 29 ms 39876 KB Output is correct
20 Correct 104 ms 48504 KB Output is correct
21 Correct 84 ms 47172 KB Output is correct
22 Correct 107 ms 46732 KB Output is correct
23 Correct 23 ms 38604 KB Output is correct
24 Correct 90 ms 46948 KB Output is correct
25 Correct 96 ms 47136 KB Output is correct
26 Correct 84 ms 47296 KB Output is correct
27 Correct 83 ms 47356 KB Output is correct
28 Correct 88 ms 46176 KB Output is correct
29 Correct 84 ms 45596 KB Output is correct
30 Correct 85 ms 46776 KB Output is correct
31 Correct 1548 ms 93028 KB Output is correct
32 Correct 1574 ms 98000 KB Output is correct
33 Correct 1459 ms 93900 KB Output is correct
34 Correct 962 ms 98616 KB Output is correct
35 Correct 1456 ms 86332 KB Output is correct
36 Correct 1499 ms 88392 KB Output is correct
37 Correct 1736 ms 95204 KB Output is correct
38 Correct 22 ms 38460 KB Output is correct
39 Correct 21 ms 38396 KB Output is correct
40 Correct 25 ms 38480 KB Output is correct
41 Correct 31 ms 39884 KB Output is correct
42 Correct 101 ms 48824 KB Output is correct
43 Correct 84 ms 47348 KB Output is correct
44 Correct 122 ms 47004 KB Output is correct
45 Correct 23 ms 38512 KB Output is correct
46 Correct 91 ms 47152 KB Output is correct
47 Correct 78 ms 47640 KB Output is correct
48 Correct 80 ms 47532 KB Output is correct
49 Correct 80 ms 47676 KB Output is correct
50 Correct 93 ms 46372 KB Output is correct
51 Correct 77 ms 45856 KB Output is correct
52 Correct 81 ms 46968 KB Output is correct
53 Correct 1496 ms 91112 KB Output is correct
54 Correct 1705 ms 85128 KB Output is correct
55 Incorrect 1648 ms 87220 KB Output isn't correct
56 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39884 KB Output is correct
2 Correct 92 ms 48484 KB Output is correct
3 Correct 84 ms 47172 KB Output is correct
4 Correct 105 ms 46660 KB Output is correct
5 Correct 21 ms 38536 KB Output is correct
6 Correct 93 ms 46928 KB Output is correct
7 Correct 28 ms 39460 KB Output is correct
8 Correct 93 ms 48344 KB Output is correct
9 Correct 83 ms 47104 KB Output is correct
10 Correct 118 ms 46996 KB Output is correct
11 Correct 22 ms 38504 KB Output is correct
12 Correct 107 ms 46868 KB Output is correct
13 Correct 96 ms 47180 KB Output is correct
14 Correct 86 ms 47316 KB Output is correct
15 Correct 81 ms 47428 KB Output is correct
16 Correct 87 ms 46220 KB Output is correct
17 Correct 79 ms 45636 KB Output is correct
18 Correct 89 ms 46808 KB Output is correct
19 Correct 29 ms 39876 KB Output is correct
20 Correct 104 ms 48504 KB Output is correct
21 Correct 84 ms 47172 KB Output is correct
22 Correct 107 ms 46732 KB Output is correct
23 Correct 23 ms 38604 KB Output is correct
24 Correct 90 ms 46948 KB Output is correct
25 Correct 96 ms 47136 KB Output is correct
26 Correct 84 ms 47296 KB Output is correct
27 Correct 83 ms 47356 KB Output is correct
28 Correct 88 ms 46176 KB Output is correct
29 Correct 84 ms 45596 KB Output is correct
30 Correct 85 ms 46776 KB Output is correct
31 Correct 1548 ms 93028 KB Output is correct
32 Correct 1574 ms 98000 KB Output is correct
33 Correct 1459 ms 93900 KB Output is correct
34 Correct 962 ms 98616 KB Output is correct
35 Correct 1456 ms 86332 KB Output is correct
36 Correct 1499 ms 88392 KB Output is correct
37 Correct 1736 ms 95204 KB Output is correct
38 Correct 33 ms 39820 KB Output is correct
39 Correct 93 ms 48560 KB Output is correct
40 Correct 99 ms 47164 KB Output is correct
41 Correct 118 ms 46768 KB Output is correct
42 Correct 21 ms 38580 KB Output is correct
43 Correct 82 ms 46884 KB Output is correct
44 Correct 89 ms 47256 KB Output is correct
45 Correct 91 ms 47268 KB Output is correct
46 Correct 92 ms 47328 KB Output is correct
47 Correct 86 ms 46176 KB Output is correct
48 Correct 88 ms 45580 KB Output is correct
49 Correct 81 ms 46848 KB Output is correct
50 Correct 1496 ms 92452 KB Output is correct
51 Correct 1457 ms 97480 KB Output is correct
52 Correct 1452 ms 93248 KB Output is correct
53 Correct 977 ms 97876 KB Output is correct
54 Correct 1390 ms 85668 KB Output is correct
55 Correct 1455 ms 87312 KB Output is correct
56 Correct 1712 ms 95160 KB Output is correct
57 Correct 1842 ms 127452 KB Output is correct
58 Correct 1973 ms 159912 KB Output is correct
59 Correct 1737 ms 127648 KB Output is correct
60 Correct 876 ms 93012 KB Output is correct
61 Execution timed out 6080 ms 100616 KB Time limit exceeded
62 Halted 0 ms 0 KB -