Submission #981180

# Submission time Handle Problem Language Result Execution time Memory
981180 2024-05-13T01:19:02 Z penguin133 Robot (JOI21_ho_t4) C++17
0 / 100
3000 ms 111640 KB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pi pair<int, int>
#define pii pair<int, pi>
#define fi first
#define se second
#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#endif
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

int n, m;
vector <pii> adj[200005];
map <int, int> mp[200005];
bool precmp[200005];
map <int, int> dist[200005];
map <int, vector <int> > bruh[200005];

void solve(){
	cin >> n >> m;
	for(int i = 1; i <= m; i++){
		int a, b, c, d; cin >> a >> b >> c >> d;
		mp[a][c]++; mp[b][c]++;
		adj[a].push_back({b, {c, d}});
		adj[b].push_back({a, {c, d}});
		bruh[a][c].push_back(b);
		bruh[b][c].push_back(a);
	}
	priority_queue <pii, vector <pii>, greater <pii> > pq;
	dist[1][0] = 0;
	pq.push({0, {1, 0}});
	while(!pq.empty()){
		int x = pq.top().fi, y = pq.top().se.fi, z = pq.top().se.se; pq.pop();
		if(dist[y][z] < x)continue;
		if(y == n){
			cout << x;
			return;
		}
		if(1){
			precmp[y] = 1;
			mp[y][z]--;
			for(auto i : adj[y]){
				int cst = 0;
				if(1){
					cst = i.se.se;
					if(dist[i.fi].find(i.se.fi) == dist[i.fi].end() || dist[i.fi][i.se.fi] > x + cst){
						dist[i.fi][i.se.fi] = x + cst;
						pq.push({x + cst, {i.fi, i.se.fi}});
					}
				}
				if(mp[y][i.se.fi] <= 1){
					if(dist[i.fi].find(0) == dist[i.fi].end() || dist[i.fi][0] > x){
						dist[i.fi][0] = x;
						//cout << y << ' ' << z << ' ' << x << ' ' << i.fi << ' ' << 0 << '\n';
						pq.push({x, {i.fi, 0}});
					}
				}
			}
			mp[y][z]++;
		}
		if(bruh[y][z].size() == 2){
			for(auto i : bruh[y][z]){
				if(dist[i].find(0) == dist[i].end() || dist[i][0] > x){
					//cout << x << ' ' << i << ' ' << 0 << '\n';
					dist[i][0] = x;
					pq.push({x, {i, 0}});
				}
			}
		}
	}
	int ans = 1e18;
	for(auto [i, j] : dist[n]){
		//cout << i << ' ' << j << '\n';
		ans = min(ans, j);
	}
	cout << (ans == 1e18 ? -1 : ans);
}

main(){
	ios::sync_with_stdio(0);cin.tie(0);
	int tc = 1;
	//cin >> tc;
	for(int tc1=1;tc1<=tc;tc1++){
		// cout << "Case #" << tc1 << ": ";
		solve();
	}
}

Compilation message

Main.cpp:81:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   81 | main(){
      | ^~~~
# Verdict Execution time Memory Grader output
1 Correct 7 ms 33368 KB Output is correct
2 Correct 7 ms 33372 KB Output is correct
3 Correct 7 ms 33304 KB Output is correct
4 Correct 7 ms 33372 KB Output is correct
5 Correct 7 ms 33408 KB Output is correct
6 Correct 7 ms 33372 KB Output is correct
7 Incorrect 8 ms 33764 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 187 ms 60872 KB Output is correct
2 Correct 81 ms 47884 KB Output is correct
3 Correct 118 ms 53792 KB Output is correct
4 Correct 84 ms 50032 KB Output is correct
5 Execution timed out 3014 ms 111640 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 7 ms 33368 KB Output is correct
2 Correct 7 ms 33372 KB Output is correct
3 Correct 7 ms 33304 KB Output is correct
4 Correct 7 ms 33372 KB Output is correct
5 Correct 7 ms 33408 KB Output is correct
6 Correct 7 ms 33372 KB Output is correct
7 Incorrect 8 ms 33764 KB Output isn't correct
8 Halted 0 ms 0 KB -