답안 #701333

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
701333 2023-02-21T00:37:42 Z Jasonwei08 두 로봇 (KOI18_robot) C++14
0 / 100
76 ms 26180 KB
#include <bits/stdc++.h>
#define int long long
#define re(a, b, c, d) for (auto a = b; a <= c; a += d)
#define de(a, b, c, d) for (auto a = b; a >= c; a -= d)
#define ms (a); memset (a, 0, sizeof a);
#define imax INT_MAX
#define imin INT_MIN
#define wh(a) while (a --)
using namespace std;
using namespace std;
typedef long long lint;
typedef pair<int, int> pint;
typedef pair<lint, lint> plint;
const int MAX = 4e5 + 10;
int n, m, d[400005];
vector <int> a;
vector <pair <int, int> > g[400005];
vector <pair <int, pair <int, int> > > v[400005];
signed main () {
//	freopen ("10.in", "r", stdin);
	cin >> n >> m;
	re (i, 0, m - 1, 1) {
		int a, b, c, p;
		cin >> a >> b >> c >> p;
		v[a].push_back ({c, {p, b}});
		v[b].push_back ({c, {p, a}});
	}
	int sz = n;
	for (int i = 1; i < n; i++) {
		if (v[i].empty()) continue;
		sort (v[i].begin(), v[i].end());
		for (int l = 0, r = 0; l < v[i].size(); l = r) {
			lint s = 0;
			while (r < v[i].size() && v[i][l].first == v[i][r].first) s += v[i][r++].second.first;
			if (r - l == 1) g[i].emplace_back (0, v[i][l].second.second);
			else {
				g[i].emplace_back (0, ++sz);
				for (int j = l; j < r; j++) {
					pint x = v[i][j].second;
					g[i].emplace_back  (x);
					g[x.second].emplace_back (0, sz);
					g[sz].emplace_back (s - x.first, x.second);
				}
			}
		}
	}
	priority_queue<pair <int, int> > Q;
	Q.emplace (0, 1);
	for (int i = 1; i <= sz; i++) d[i] = 4e18;
	while (!Q.empty()) {
		auto t = Q.top();
		Q.pop();
		if (d[t.second] != 4e18) continue;
		d[t.second] = -t.first;
		for (auto nxt : g[t.second]) Q.emplace (t.first - nxt.first, nxt.second);
	}
	cout << (d[n] == 4e18 ? -1 : d[n]);
}

Compilation message

robot.cpp: In function 'int main()':
robot.cpp:32:28: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |   for (int l = 0, r = 0; l < v[i].size(); l = r) {
      |                          ~~^~~~~~~~~~~~~
robot.cpp:34:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |    while (r < v[i].size() && v[i][l].first == v[i][r].first) s += v[i][r++].second.first;
      |           ~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 11 ms 19924 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 28 ms 21972 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 19124 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 76 ms 26180 KB Output isn't correct
2 Halted 0 ms 0 KB -