QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#348531 | #8136. Rebellious Edge | ucup-team228# | WA | 45ms | 3764kb | C++20 | 4.7kb | 2024-03-09 19:20:06 | 2024-03-09 19:20:07 |
Judging History
answer
//#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("avx2") // doesn't work on Yandex
//#pragma GCC target("avx") // for old judges
//#pragma GCC target("bmi,bmi2,lzcnt,popcnt") // fast bit operations
#include <iostream>
#include <iomanip>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <queue>
#include <deque>
#include <cmath>
#include <algorithm>
#include <cassert>
#include <chrono>
#include <random>
#include <string>
#include <numeric>
#include <complex>
#include <tuple>
#include <utility>
#include <bitset>
#include <array>
#include <stack>
#include <sstream>
#include <unordered_set>
using namespace std;
typedef long long ll;
string to_string(string a) { return '"' + a + '"'; }
string to_string(char a) { return "'" + string(1, a) + "'"; }
string to_string(const char* a) { return to_string((string) a); }
string to_string(bool a) { return a ? "true" : "false"; }
template <class T1, class T2>
string to_string(pair<T1, T2> a) {
return "(" + to_string(a.first) + ", " + to_string(a.second) + ")";
}
template <class T>
string to_string(T a) {
bool first = true; string res = "{";
for (const auto& i : a) {
if (!first) res += ", ";
first = false;
res += to_string(i);
}
res += "}";
return res;
}
void debug_out() { cerr << endl; }
template <class T1, class... T2>
void debug_out(T1 a, T2... b) {
cerr << " " << to_string(a);
debug_out(b...);
}
#ifdef LOCAL
#define out(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define out(...) 42
#endif
clock_t start_time; void start_timer() { start_time = clock(); }
double get_time() { return (double) (clock() - start_time) / CLOCKS_PER_SEC; }
void Solve();
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
#ifdef LOCAL
freopen("usr/share/man/man1/input.txt", "r", stdin);
#endif
start_timer();
Solve();
#ifdef LOCAL
cerr << fixed << setprecision(3);
cerr << endl << "Time spent: " << get_time() << endl;
#endif
return 0;
}
// do something, stay focused
// look for stupid bugs
// guess, slow, stress
// don't overgeneralize
// don't rush
// don't waste time on standings
// SOLVE THE PROBLEM OR DIE TRYING
// THE SOLUTION IS ALWAYS SIMPLE
// THE CODE IS ALWAYS SHORT
const int N = 2e5 + 5;
const ll inf = 1e18;
vector<pair<int, ll>> g[2][N];
pair<int, ll> par[N];
bool reach[N];
void add_e(int u, int v, ll w) {
g[0][u].push_back({v, w});
g[1][v].push_back({u, w});
}
void dfs(int u, int x) {
reach[u] = 1;
for (auto [v, w] : g[0][u]) {
if (v == x) continue;
if (reach[v]) continue;
if (par[v].first == u) {
dfs(v, x);
}
}
}
void Solve() {
int T;
cin >> T;
while (T--) {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
g[0][i].clear();
g[1][i].clear();
par[i] = {0, 0};
reach[i] = 0;
}
int x = 0;
int y = 0;
ll wxy = 0;
for (int i = 1; i <= m; i++) {
int u, v;
ll w;
cin >> u >> v >> w;
if (u < v) {
add_e(u, v, w);
}
else {
x = v;
y = u;
wxy = w;
}
}
ll ans_def = 0;
for (int v = 2; v <= n; v++) {
ll mn = inf;
int who = 0;
for (auto [u, w] : g[1][v]) {
if (w < mn) {
mn = w;
who = u;
}
}
par[v] = {who, mn};
ans_def += mn;
}
ll ans_alt = inf;
if (x != 1) {
ans_alt = ans_def - par[x].second + wxy;
dfs(1, x);
if (!reach[y]) {
ll rest = ans_alt;
ans_alt = inf;
vector<int> path;
int ptr = y;
while (ptr != x) {
path.push_back(ptr);
ptr = par[ptr].first;
}
for (int v : path) {
ll mn = inf;
for (auto [u, w] : g[1][v]) {
if (reach[u] && w < mn) {
mn = w;
}
}
if (mn == inf) continue;
ll ans_cur = rest - par[v].second + mn;
ans_alt = min(ans_alt, ans_cur);
}
}
}
ll ans = min(ans_def, ans_alt);
cout << ans << "\n";
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3764kb
input:
3 5 6 1 2 4 1 3 2 2 3 0 3 4 1 4 5 1 5 2 1 4 4 1 2 4 1 3 6 1 4 8 4 2 1000000 3 3 1 2 100 2 1 10 2 3 1000
output:
5 18 1100
result:
ok 3 number(s): "5 18 1100"
Test #2:
score: 0
Accepted
time: 37ms
memory: 3684kb
input:
50000 4 5 2 4 998973548 2 3 501271695 4 1 778395982 1 4 32454891 1 2 757288934 4 5 1 4 720856669 2 3 665098951 3 4 407461517 2 1 866914401 1 2 457859826 4 5 1 2 75288664 1 4 624893594 3 2 458973866 2 4 769074655 2 3 834773751 4 5 2 3 237060634 2 4 297307882 3 4 200383586 1 2 42856502 3 1 16574713 4 ...
output:
1291015520 1530420294 1534956009 480300722 1366795927 1541095843 2493849488 858095911 1034153425 793861088 605832428 1051598350 612891589 1265994009 517769091 1678219738 1556463491 93634961 960978736 984886788 1696503797 1002892611 1969660290 1431417780 1515267731 977157479 1937478556 654475526 1401...
result:
ok 50000 numbers
Test #3:
score: -100
Wrong Answer
time: 45ms
memory: 3732kb
input:
50000 4 6 1 3 754771977 2 3 517886121 1 4 392356144 1 2 702785740 3 4 888230940 2 1 829304957 4 6 2 4 255940037 1 2 380616616 1 4 819140865 3 4 36965607 1 3 496378345 4 3 652252309 4 6 2 4 179216787 4 2 401136502 1 2 715271531 1 3 859345710 3 4 24470489 1 4 148650889 4 6 3 2 20348069 1 2 152861663 1...
output:
1613028005 913960568 1284952701 1294564551 199037829 1236121455 983447828 1161647829 1289612543 2444304029 431872921 1272140390 949528400 2328941976 696541797 363553357 999320657 2221495861 879052116 1287531701 912524980 1072419431 1187727045 1571845059 1184110956 1136184594 430092563 1132894799 962...
result:
wrong answer 313th numbers differ - expected: '1326090611', found: '1821468187'