Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
- //#pragma GCC optimize("unroll-loops")
- //#pragma GCC optimize("Ofast")
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- #define pb push_back
- #define pii pair<int, int>
- #define mp make_pair
- #define loop(i, n) for(int i = 0; i < (int)n; ++i)
- #define loop1(i, n) for(int i = 1; i <= (int)n; ++i)
- #define rloop(i, n) for (int i = (int)n; i >= 0; --i)
- #define F first
- #define S second
- #define sorted(a) sort(a.begin(), a.end())
- const int INF = 2e9;
- int main() {
- ios::sync_with_stdio(0);
- cin.tie(0); cout.tie(0);
- int t;
- cin >> t;
- for (int test = 0; test < t; ++test) {
- int n, m, c;
- cin >> n >> m >> c;
- vector <vector <pii>> v(n + 1);
- for (int i = 0; i < m; ++i) {
- int x, y, w;
- cin >> x >> y >> w;
- v[y].pb(mp(x, w));
- }
- vector <int> d(n + 1, INF);
- d[c] = 0;
- set <pii> q;
- q.insert(mp(d[c], c));
- while (!q.empty()) {
- pii frnt = *q.begin();
- int start = frnt.S;
- q.erase(q.begin());
- for (int i = 0; i < v[start].size(); ++i) {
- int g = v[start][i].F;
- int w = v[start][i].S;
- if (d[start] + w < d[g]) {
- q.erase(mp(d[g], g));
- d[g] = d[start] + w;
- q.insert(mp(d[g], g));
- }
- }
- }
- int ans = 0, cnt = 0;
- for (int i = 1; i <= n; ++i) {
- if (d[i] < INF) {
- cnt += 1;
- ans = max(ans, d[i]);
- }
- }
- cout << cnt << " " << ans << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement