728x90
반응형
29% 틀렸습니다
왜 안되는거야...
#include <iostream>
#include<vector>
#include<map>
using namespace std;
vector<int>parent;
int find(int node){
if(parent[node]<0){
return node;
}
return parent[node]=find(parent[node]);
}
void unions(int x,int y){
int xp=find(x);
int yp=find(y);
if(xp==yp)return;
if(parent[xp]<parent[yp]){
parent[xp]+=parent[yp];
parent[yp]=xp;
}
if(parent[yp]<=parent[xp]){
parent[yp]+=parent[xp];
parent[xp]=yp;
}
}
int main()
{
int n,m;
long long k;
cin>>n>>m>>k;
vector<int>arr;
arr.assign(n+1,0);
parent.assign(n+1,-1);
for(int i=1;i<=n;i++){
cin>>arr[i];
}
int v,w;
for(int i=0;i<m;i++){
cin>>v>>w;
unions(v,w);
}
//값이 더작은것을 택하기
map<int,int>M;
long long k1=0;
for(int i=1;i<=n;i++){
if(parent[i]<0){
M[i]=arr[i];
}
}
for(int i=1;i<=n;i++){
if(parent[i]>0){
M[parent[i]]=min(arr[i],M[parent[i]]);
}
}
for(auto it=M.begin();it!=M.end();it++){
k1+=(it->second);
}
if(k1>k){
cout<<"Oh no\n";
}
else{
cout<<k1<<"\n";
}
return 0;
}
맞았습니다
union부분 if,ese로 안하고 if 따로 해줬다가 계속 틀렸습니다 뜸..
#include <iostream>
#include<vector>
#include<map>
using namespace std;
vector<int>parent;
int find(int node){
if(parent[node]<0){
return node;
}
return parent[node]=find(parent[node]);
}
void unions(int x,int y){
int xp=find(x);
int yp=find(y);
if(xp==yp)return;
if(parent[xp]<parent[yp]){
parent[xp]=yp;
}
else if(parent[yp]<=parent[xp]){
parent[yp]=xp;
}
}
int main()
{
int n,m;
long long k;
cin>>n>>m>>k;
vector<int>arr;
parent.assign(n+1,0);
for(int i=1;i<=n;i++){
cin>>parent[i];
parent[i]*=-1;
}
int v,w;
for(int i=0;i<m;i++){
cin>>v>>w;
unions(v,w);
}
//값이 더작은것을 택하기
long long k1=0;
for(int i=1;i<=n;i++){
if(parent[i]<0){
k1+=parent[i]*-1;
}
}
if(k1>k){
cout<<"Oh no\n";
}
else{
cout<<k1<<"\n";
}
return 0;
}
728x90
반응형
'하루 1문제 챌린지 > Gold5' 카테고리의 다른 글
백준 10282번 해킹 (다익스트라,C++) (1) | 2024.06.17 |
---|---|
백준 1043번 거짓말(C++)🚩 (1) | 2024.02.27 |
백준 203202번 민트초코(C++) 🚩 (1) | 2024.02.17 |
백준 17485 진우의 달여행(large) C++ 🚩 (1) | 2024.01.31 |
백준 14719번 빗물 (C++) 🚩 (0) | 2024.01.22 |