이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const long long mxn = 1e6 + 10;
struct we
{
long long idx,val;
};
bool cmp(const struct we &l,const struct we &r)
{
return l.val < r.val;
}
struct we sot[mxn] = {};
char ans[mxn] = {};
long long npop[mxn] = {},gr[mxn] = {},he[mxn] = {},siz[mxn] = {},u[mxn] = {};
vector<long long> pat[mxn] = {},tre[mxn] = {};
long long figr(long long l)
{
long long cl = l,f;
while(l != gr[l])
{
l = gr[l];
}
while(cl != gr[cl])
{
f = gr[cl];
gr[cl] = l;
cl = f;
}
return l;
}
long long mer(long long cl,long long cr)
{
long long l = figr(cl),r = figr(cr);
gr[r] = l;
siz[l] += siz[r];
return l;
}
long long re(long long cn)
{
long long i,j,fn;
ans[cn] = '1';
for(i=0; i<tre[cn].size(); i++)
{
fn = tre[cn][i];
re(fn);
}
return 0;
}
int main()
{
long long i,j,n,m,cn,cm,fn,fm;
scanf("%lld %lld",&n,&m);
for(i=0; i<n; i++)
{
scanf("%lld",&npop[i]);
sot[i] = {i,npop[i]};
he[i] = i;
gr[i] = i;
siz[i] = npop[i];
ans[i] = '0';
}
for(i=0; i<m; i++)
{
scanf("%lld %lld",&cn,&cm);
pat[cn-1].push_back(cm-1);
pat[cm-1].push_back(cn-1);
}
sort(sot,sot+n,cmp);
for(i=0; i<n; i++)
{
cn = sot[i].idx;
u[cn] = 1;
for(j=0; j<pat[cn].size(); j++)
{
fn = pat[cn][j];
if(u[fn] == 0)
{
continue;
}
cm = figr(cn);
fm = figr(fn);
if(cm != fm)
{
if(siz[fm] >= npop[cn])
{
tre[cn].push_back(he[fm]);
}
mer(cm,fm);
}
}
}
re(sot[n-1].idx);
printf("%s\n",ans);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
island.cpp: In function 'long long int re(long long int)':
island.cpp:46:15: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
46 | for(i=0; i<tre[cn].size(); i++)
| ~^~~~~~~~~~~~~~~
island.cpp:44:17: warning: unused variable 'j' [-Wunused-variable]
44 | long long i,j,fn;
| ^
island.cpp: In function 'int main()':
island.cpp:77:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
77 | for(j=0; j<pat[cn].size(); j++)
| ~^~~~~~~~~~~~~~~
island.cpp:56:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
56 | scanf("%lld %lld",&n,&m);
| ~~~~~^~~~~~~~~~~~~~~~~~~
island.cpp:59:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
59 | scanf("%lld",&npop[i]);
| ~~~~~^~~~~~~~~~~~~~~~~
island.cpp:68:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
68 | scanf("%lld %lld",&cn,&cm);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |