제출 #1337856

#제출 시각아이디문제언어결과실행 시간메모리
1337856top1svtinCommuter Pass (JOI18_commuter_pass)C++17
컴파일 에러
0 ms0 KiB
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#pragma GCC optimize("inline")

#include <bits/stdc++.h>

using namespace std;

#define kien long long
#define int long long
#define pb push_back
#define FOR(i, a, b) for (int i = a;i <= b; i++)
#define FORD(i, a, b) for (int i = a;i >= b; i--)
#define pii pair<int, int>
#define dembit(a) __builtin_popcountll(a)
#define task "kien"
#define fin(x) freopen(x".inp","r",stdin)
#define fou(x) freopen(x".out","w",stdout)
#define debug(x) cout << x << " "
#define down cout << "\n"
const kien MOD = 1e9 + 7;
const int NTEST = 100;
const int Million = 1e6;
const int MXN = 2e5 + 5;
const int INF = 1e9;

mt19937 rd(chrono::high_resolution_clock::now().time_since_epoch().count());
kien rand(kien l, kien r) {
    assert(l <= r);
    return uniform_int_distribution<kien>(l, r)(rd);
}

kien n, k, m, u, v, h, vis[MXN], trace[MXN], tiep[MXN];
kien maxx, minn, vtr, d[MXN], s, t, r, x, l, timer, ans, add;
vector <pii> dp[MXN];

void dijkstra (int s) {
	priority_queue <pii, vector <pii>, greater<pii>> q;
	d[s] = 0;
	q.push({d[s], s});

	while (!q.empty()) {
		int u = q.top().second;
		q.pop();

		if (vis[u]) continue;
		vis[u] = 1;

		for (auto v : dp[u]) {
			if (vis[v.first]) continue;

			if (d[v.first] > d[u] + v.second) {
				d[v.first] = d[u] + v.second;
				trace[v.first] = u;
				q.push({d[v.first], v.first});
			}
		}
	}

	/// giờ ta phải làm sao để có thể cho đường đi từ s đến t là 0 hết thì ta cần phải ??
	vector <int> vec;
	int en = t;
	while (en != s) {
		vec.pb(en);
		en = trace[en];
	}
	vec.pb(s);
	reverse(vec.begin(), vec.end());

	FOR (i, 0, vec.size() - 2) {
		tiep[vec[i]] = vec[i + 1];
	}

	queue <int> p;
	p.push(s);
	while (!p.empty()) {
		int u = p.front();
		p.pop();

		for (auto &v : dp[u]) {
			if (v.first == tiep[u]) {
				p.push(v.first);
				v.second = 0;
			}
		}
	}
}

void djk (int s, int t) {
	priority_queue <pii, vector <pii>, greater<pii>> q;
	d[s] = 0;
	q.push({d[s], s});

	while (!q.empty()) {
		int u = q.top().second;
		q.pop();

		if (vis[u]) continue;
		vis[u] = 1;

		for (auto v : dp[u]) {
			if (vis[v.first]) continue;

			if (d[v.first] > d[u] + v.second) {
				d[v.first] = d[u] + v.second;
				q.push({d[v.first], v.first});

			}
		}
	}

	cout << d[t] << "\n";
}

void solve() {
	kien c;
	cin >> n >> m;
	FOR (i, 1, n) {
		d[i] = MOD;
		vis[i] = 0;
	}
	cin >> s >> t;
	cin >> l >> r;
	FOR (i, 1, m) {
		cin >> u >> v >> c;
		dp[u].pb({v, c});
		dp[v].pb({u, c});
	}

	dijkstra(s);
	FOR (i, 1, n) {
		d[i] = MOD;
		vis[i] = 0;
	}
	djk(l, r);
//	cout << "gd";
}

main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    if (fopen(task".inp", "r")) {
        fin(task); fou(task);
    }

    int tt = 1;
    while(tt--) {
		solve();
    }

    cerr << "\n" << 1.0 * clock() / CLOCKS_PER_SEC << "s ";
}

컴파일 시 표준 에러 (stderr) 메시지

commuter_pass.cpp:140:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  140 | main() {
      | ^~~~
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:18:23: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 | #define fin(x) freopen(x".inp","r",stdin)
      |                ~~~~~~~^~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:145:9: note: in expansion of macro 'fin'
  145 |         fin(task); fou(task);
      |         ^~~
commuter_pass.cpp:19:23: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 | #define fou(x) freopen(x".out","w",stdout)
      |                ~~~~~~~^~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:145:20: note: in expansion of macro 'fou'
  145 |         fin(task); fou(task);
      |                    ^~~
In file included from /usr/include/c++/13/string:43,
                 from /usr/include/c++/13/bitset:52,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:52,
                 from commuter_pass.cpp:6:
/usr/include/c++/13/bits/allocator.h: In destructor 'std::_Vector_base<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >::_Vector_impl::~_Vector_impl()':
/usr/include/c++/13/bits/allocator.h:184:7: error: inlining failed in call to 'always_inline' 'std::allocator< <template-parameter-1-1> >::~allocator() noexcept [with _Tp = std::pair<long long int, long long int>]': target specific option mismatch
  184 |       ~allocator() _GLIBCXX_NOTHROW { }
      |       ^
In file included from /usr/include/c++/13/vector:66,
                 from /usr/include/c++/13/functional:64,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:53:
/usr/include/c++/13/bits/stl_vector.h:133:14: note: called from here
  133 |       struct _Vector_impl
      |              ^~~~~~~~~~~~