제출 #1270490

#제출 시각아이디문제언어결과실행 시간메모리
1270490dorkikannTraining (IOI07_training)C++20
10 / 100
1 ms584 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e3 + 5; vector<int> Graph[N]; vector<tuple<int, int, int>> Edges; int Depth[N]; vector<pair<int, int>> Check[N]; int Solution[N]; void DFS1(int u, int parent) { Depth[u] = Depth[parent] + 1; for(auto v : Graph[u]) { if(v != parent) DFS1(v, u); } } void Fix() { for(auto [a, b, c] : Edges) { if(c == 0 || ((Depth[a] % 2) != (Depth[b] % 2))) continue; if(Depth[a] > Depth[b]) Check[b].push_back({a, c}); else Check[a].push_back({b, c}); } } void DFS2(int u, int parent) { for(auto v : Graph[u]) { if(v != parent) { DFS2(v, u); Solution[u] = max(Solution[u], Solution[v]); } } for(auto [v, c] : Check[u]) Solution[u] = max(Solution[u], Solution[v] + c); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, m, a, b, c; cin >> n >> m; int sum = 0; for(int i = 0; i < m; i++) { cin >> a >> b >> c; if(c == 0) { Graph[a].push_back(b); Graph[b].push_back(a); } sum += c; Edges.push_back({a, b, c}); } DFS1(1, 0); Fix(); DFS2(1, 0); cout << (sum - Solution[1]) << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...