답안 #895737

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
895737 2023-12-30T17:17:36 Z Ludissey Training (IOI07_training) C++14
30 / 100
3 ms 860 KB
#include <bits/stdc++.h>
using namespace std;

#define int long long

int n,m;

vector<vector<int>> paved;
vector<vector<int>> child;
vector<pair<pair<int,int>, int>> edges;
map<int, int> memo;

int dp(int x){
    if(memo.find(x)!=memo.end()) return memo[x];
    if(x==n) return memo[x]=0;

    int mx=dp(x+1);
    for (int i = 0; i < m-(n-1); i++)
    {
        if(edges[i].first.first==x){
            int b=edges[i].first.second;
            int c=edges[i].second;
            if((b-x)%2!=0) continue;
            mx=max(dp(b)+c,mx);
        }
    }
    return memo[x]=mx;
}

signed main() {
	// Input:
    ios::sync_with_stdio(false); cin.tie(nullptr);
    cin>>n>>m;
    vector<int> conv(n+1); 
    paved.resize(n+1);
    child.resize(n+1);
    int sum=0;
    for (int i = 0; i < m; i++)
    {
        int a,b,c; cin >> a >> b >> c;
        sum+=c;
        if(a>b) swap(a,b);
        if(c==0) {
            paved[a].push_back(b);
            paved[b].push_back(a);
        }
        else edges.push_back({{a,b},c});
    }
    int c=-1;
    for (int i = n; i >= 1; i--) { if(paved[i].size()==1) c=i; }
    int p=-1;
    int i=1;
    while(i<=n){
        conv[c]=i;
        if(paved[c][0]==p){
            p=c;
            c=paved[c][1];
        }
        else {
            p=c;
            c=paved[c][0];
        }
        i++;
    }
    for (int j = 0; j < m-(n-1); j++)
    {
        edges[j].first.first=conv[edges[j].first.first];
        edges[j].first.second=conv[edges[j].first.second];
        if(edges[j].first.first>edges[j].first.second) swap(edges[j].first.first,edges[j].first.second);
    }
    vector<bool> cyc(n+1);
    cout << sum-dp(0) << "\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 604 KB Output is correct
2 Correct 3 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 348 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 348 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 604 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 604 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 836 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 860 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 604 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 860 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -