# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
89138 | asifthegreat | Kronican (COCI16_kronican) | C++14 | 3 ms | 1000 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int N = 100000;
int parent[N];
struct MST{
int x,y,val;
};
bool operator<(MST a , MST b){return a.val < b.val;}
vector<MST>v;
int Find(int n)
{
if(n == parent[n])return n;
return parent[n] = Find(parent[n]);
}
void Union(int a,int b)
{
parent[Find(a)] = Find(b);
}
int main()
{
for(int i = 0; i < N;i++)parent[i] = i;
int n,k;
scanf("%d%d",&n,&k);
k = n-k;
int val;
for(int i = 1; i <= n;i++){
for(int j = 1; j <= n;j++){
scanf("%d",&val);
if(i == j)continue;
else{
v.push_back({i,j,val});
}
}
}
sort(v.begin(),v.end());
int sum = 0;
for(auto i: v){
if(Find(i.x)==Find(i.y))continue;
if(!k)break;
sum += i.val;
k--;
Union(i.x,i.y);
}
printf("%d\n",sum);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |