제출 #91644

#제출 시각아이디문제언어결과실행 시간메모리
91644Retro3014Islands (IOI08_islands)C++17
27 / 100
462 ms39408 KiB
#include <iostream>
#include <algorithm>
#include <vector>

typedef long long ll;
using namespace std;
#define MAX_N 1000000

struct E{
    int x, y, c;
    bool operator <(const E &a)const{
        return c<a.c;
    }
};
int N, a, b;
vector<E> edge;
ll ans;

int group[MAX_N+1];
int num[MAX_N+1];
int degree[MAX_N+1];
vector<int> vfg;
int find_group(int x){
    if(group[x]==group[group[x]]){
        return group[x];
    }
    while(x!=group[x]){
        vfg.push_back(x);
        x=group[x];
    }
    while(!vfg.empty()){
        group[vfg.back()]=x;
        vfg.pop_back();
    }
    return x;
}
void union_group(int x, int y){
    x=find_group(x); y=find_group(y);
    if(x==y)    return;
    if(num[x]>num[y]){int tmp=x; x=y; y=tmp;}
    group[x]=y;
    num[y]+=num[x];
}



int main(){
    scanf("%d", &N);
    for(int i=1; i<=N; i++){
        group[i]=i; num[i]=1;
        scanf("%d%d", &a, &b);
        edge.push_back({i, a, b});
    }
    sort(edge.begin(), edge.end());
    while(!edge.empty()){
        E now = edge.back();
        edge.pop_back();
        if(degree[now.x]<=1 && degree[now.y]<=1 && find_group(now.x)!=find_group(now.y)){
            union_group(now.x, now.y);
            degree[now.x]++; degree[now.y]++;
            ans+=(ll)now.c;
        }
    }
    printf("%lld", ans);
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

islands.cpp: In function 'int main()':
islands.cpp:48:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &N);
     ~~~~~^~~~~~~~~~
islands.cpp:51:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &a, &b);
         ~~~~~^~~~~~~~~~~~~~~~
#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...