| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 827570 | raphaelp | 관광 (NOI14_sightseeing) | C++14 | 3257 ms | 133884 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int UF[500002];
int Rank[500002];
int num = 0;
int find(int x)
{
return (x == UF[x]) ? x : (UF[x] = find(UF[x]));
}
bool merge(int a, int b)
{
a = find(a);
b = find(b);
if (a == b)
return false;
if (Rank[b] > Rank[a])
swap(a, b);
UF[b] = a;
if (Rank[b] == Rank[a])
Rank[a]++;
num++;
return true;
}
void rec(int x, int w, vector<vector<pair<int, int>>> &Tree, vector<int> &occ, vector<int> &Querries)
{
occ[x] = 1;
if (Querries[x] == 1)
Querries[x] = w;
for (int i = 0; i < Tree[x].size(); i++)
{
if (occ[Tree[x][i].first] == 1)
continue;
rec(Tree[x][i].first, min(w, Tree[x][i].second), Tree, occ, Querries);
}
}
void linsort(vector<tuple<int, int, int>> &Tab)
{
vector<vector<tuple<int, int, int>>> temp(100003);
for (int i = 0; i < Tab.size(); i++)
{
temp[get<0>(Tab[i])].push_back(Tab[i]);
}
Tab.clear();
for (int i = 0; i < 100003; i++)
{
for (int j = 0; j < temp[i].size(); j++)
{
Tab.push_back(temp[i][j]);
}
}
}
int main()
{
int V, E, Q;
cin >> V >> E >> Q;
for (int i = 0; i <= V; i++)
{
UF[i] = i;
Rank[i] = 0;
}
vector<tuple<int, int, int>> Tab;
for (int i = 0; i < E; i++)
{
int a, b, c;
cin >> a >> b >> c;
a--;
b--;
Tab.push_back({c, a, b});
}
linsort(Tab);
vector<vector<pair<int, int>>> Tree(V + 1);
while (num < V - 1)
{
int a = get<1>(Tab[Tab.size() - 1]);
int b = get<2>(Tab[Tab.size() - 1]);
int w = get<0>(Tab[Tab.size() - 1]);
if (merge(a, b))
{
Tree[a].push_back({b, w});
Tree[b].push_back({a, w});
}
Tab.pop_back();
}
vector<int> Querries(V + 1, 0);
vector<int> Querries2(Q + 1, 0);
for (int i = 0; i < Q; i++)
{
cin >> Querries2[i];
Querries2[i]--;
Querries[Querries2[i]] = 1;
}
vector<int> occ(V + 1, 0);
rec(0, 1000000, Tree, occ, Querries);
for (int i = 0; i < Q; i++)
{
cout << Querries[Querries2[i]] << endl;
}
}컴파일 시 표준 에러 (stderr) 메시지
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
