제출 #1356130

#제출 시각아이디문제언어결과실행 시간메모리
1356130coin_Shops (NOI24_shops)C++17
0 / 100
351 ms67688 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
signed main() {
    int n,m; cin>>n>>m;
    char shop[n];
    for (int i=0;i<n;i++) shop[i]='0';
    int cost[n]; 
    for (int i=0;i<n;i++) cost[i]=INT_MAX;
    vector<pii> adj[n];
    for (int i = 0; i<m; i++) {
        int a,b,w;cin>>a>>b>>w;a--;b--;
        adj[a].push_back({b,w});
        adj[b].push_back({a,w});
    }
    vector<int> min_edge[n];
    for (int i=0;i<n;i++) min_edge[i].resize(3);
    // each shortest edge stored as {weight, from, to}
    for (int i=0;i<n;i++) {
        int min = INT_MAX;
        pii edge;
        for (pii e: adj[i]) {
            if (min>e.second) {
                min = e.second;
                edge = e;
            }
        }
        min_edge[i][0]=edge.second;
        min_edge[i][1]=i;
        min_edge[i][2]=edge.first;
    }
    sort(min_edge, min_edge+n);
    int max_cost = min_edge[n-1][0];
    for (int i=n-1;i>=0;i--) {
        int from=min_edge[i][1], to=min_edge[i][2], weight=min_edge[i][0];
        if (shop[from]=='0'&&shop[to]=='0') {
            shop[from]='B';
            shop[to]='D';
        }
        else if (shop[from]=='D'&&shop[to]=='0') {
            shop[to]='B';
        }
        else if (shop[from]=='B'&&shop[to]=='0') {
            shop[to]='D';
        }
        else if (shop[from]=='0'&&shop[to]=='D') {
            shop[from]='B';
        }
        else if (shop[from]=='0'&&shop[to]=='B') {
            shop[from]='D';
        }
    }
    cout<<max_cost<<"\n";
    for (int i=0;i<n;i++) cout<<shop[i];
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…