#include <iostream>
#include <vector>
#include <utility>
using namespace std;
int pos[5000];
int pla[5000];
int cur;
int vis[5000];
int n,m;
vector<int> adj1[5000];
vector<pair<int, int>> adj2[5000];
int dp[5000];
int cnt[5000];
void dfs1(int no){
vis[no]=1;
pos[no] = cur;
pla[cur] = no;
cur++;
for(auto x : adj1[no]){
if(vis[x]==0){
dfs1(x);
}
}
}
int main()
{
cin>>n>>m;
cur=1;
dp[0] = 0;
for(int i=0; i<=4000; i++){cnt[i]=0; vis[i]=0;}
int cost = 0;
int u,v,w;
for(int i=1; i<=m; i++){
cin>>u>>v>>w;
cost += w;
if(w==0){adj1[u].push_back(v); adj1[v].push_back(u); cnt[u]++; cnt[v]++;}
else {
adj2[u].emplace_back(v, w);
adj2[v].emplace_back(u, w);
}
}
for(int i=1; i<=n; i++){
if(cnt[i]==1){ dfs1(i); break;}
}
for(int i=1; i<=n; i++){
dp[i] = dp[i-1];
for(auto edge : adj2[pla[i]]){
if(pos[edge.first] < i && (i + pos[edge.first]) %2 == 0){
dp[i] = max(dp[i], edge.second + dp[pos[edge.first]]);
}
}
}
cout<<cost-dp[n]<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |