Submission #3315215
Source Code Expand
#include<iostream>
#include <vector>
#include <list>
#include<stack>
#include<queue>
#include<array>
#include <set>
#include<map>
#include<string>
#include<stdlib.h>
#include<algorithm>
#include <functional>
#include<math.h>
#include<fstream>
#include<iomanip>
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
#define FOR(k,m,n) for(ll (k)=(m);(k)<(n);(k)++)
#define REP(i,n) FOR((i),0,(n))
#define WAITING(str) int str;std::cin>>str;
#define DEBUGING(str) cout<<str<<endl
constexpr int INF = (1 << 30);
constexpr ll INFL = (1ll << 60);
constexpr ll MOD = 1000000007;// 10^9+7
//変数
class UnionFind {
public:
vector<int>rank, parent;
//初期化
UnionFind(int size) {
rank.resize(size, 0);
parent.resize(size, 0);
REP(i, size)parent[i] = i;
}
//木の根を求める
int find(int x) {
if (parent[x] == x)return x;
else return parent[x] = find(parent[x]);
}
//xとyの属する集合を併合
void unite(int x, int y) {
x = find(x);
y = find(y);
if (x == y)return;
if (rank[x] < rank[y])
parent[x] = y;
else {
parent[y] = x;
if (rank[x] == rank[y])rank[x]++;
}
}
//xとyが同じ集合に属するか否か
bool same(int x, int y) {
return (find(x) == find(y));
}
};
struct Edge { ll u, v, cost; };
bool comp(const Edge& r1, const Edge& r2) {
return r1.cost < r2.cost;
}
int N, M, Q;
vector<Edge> edges;
vector<pair<ll, ll>> st;
//サブ関数
//入力
void input()
{
cin >> N >> M;
int a, b, c;
REP(i, M) {
cin >> a >> b >> c;
a--; b--;
edges.push_back({ a,b,c });
}
cin >> Q;
REP(i, Q) {
cin >> a >> b;
a--; b--;
st.push_back({ a,b });
}
}
vector<Edge> kruskal() {
UnionFind uf(N);
vector<Edge> res;
sort(edges.begin(), edges.end(), comp);
for (auto e : edges) {
if (!uf.same(e.u, e.v)) {
uf.unite(e.u, e.v);
res.push_back(e);
}
}
return res;
}
ll kruskal(vector<Edge> edges) {
UnionFind uf(N);
ll res = 0;
sort(edges.begin(), edges.end(), comp);
for (auto e : edges) {
if (!uf.same(e.u, e.v)) {
uf.unite(e.u, e.v);
res += e.cost;
}
}
return res;
}
//計算
void calc()
{
auto minimalTree = kruskal();
for (const auto& p : st) {
auto graph = minimalTree;
graph.push_back({ p.first,p.second,0 });
cout << kruskal(graph) << endl;
}
}
//出力
void output()
{
}
//デバッグ
void debug()
{
int N;
cin>>N;
}
//メイン関数
int main()
{
input();
calc();
output();
debug();
return 0;
}
Submission Info
Submission Time |
|
Task |
A - Graph |
User |
toma25 |
Language |
C++14 (GCC 5.4.1) |
Score |
500 |
Code Size |
2647 Byte |
Status |
TLE |
Exec Time |
3156 ms |
Memory |
14952 KB |
Judge Result
Set Name |
Sample |
subtask1 |
subtask2 |
All |
Score / Max Score |
0 / 0 |
200 / 200 |
300 / 300 |
0 / 200 |
Status |
|
|
|
|
Set Name |
Test Cases |
Sample |
sample_1.txt, sample_2.txt |
subtask1 |
sample_2.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_2.txt, subtask_1_3.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt |
subtask2 |
sample_1.txt, sample_2.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_2.txt, subtask_1_3.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt, subtask_2_1.txt, subtask_2_2.txt, subtask_2_3.txt, subtask_2_4.txt, subtask_2_5.txt, subtask_2_6.txt, subtask_2_7.txt, subtask_2_8.txt |
All |
sample_1.txt, sample_2.txt, sample_1.txt, sample_2.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_2.txt, subtask_1_3.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt, subtask_2_1.txt, subtask_2_2.txt, subtask_2_3.txt, subtask_2_4.txt, subtask_2_5.txt, subtask_2_6.txt, subtask_2_7.txt, subtask_2_8.txt, subtask_3_1.txt, subtask_3_2.txt, subtask_3_3.txt, subtask_3_4.txt, subtask_3_5.txt, subtask_3_6.txt, subtask_3_7.txt, subtask_3_8.txt |
Case Name |
Status |
Exec Time |
Memory |
sample_1.txt |
AC |
1 ms |
256 KB |
sample_2.txt |
AC |
1 ms |
256 KB |
subtask_1_1.txt |
AC |
2 ms |
256 KB |
subtask_1_10.txt |
AC |
199 ms |
8304 KB |
subtask_1_11.txt |
AC |
1 ms |
256 KB |
subtask_1_2.txt |
AC |
42 ms |
1912 KB |
subtask_1_3.txt |
AC |
396 ms |
12908 KB |
subtask_1_4.txt |
AC |
6 ms |
640 KB |
subtask_1_5.txt |
AC |
7 ms |
704 KB |
subtask_1_6.txt |
AC |
100 ms |
3444 KB |
subtask_1_7.txt |
AC |
395 ms |
13548 KB |
subtask_1_8.txt |
AC |
6 ms |
640 KB |
subtask_1_9.txt |
AC |
12 ms |
764 KB |
subtask_2_1.txt |
AC |
2229 ms |
12780 KB |
subtask_2_2.txt |
AC |
2242 ms |
13036 KB |
subtask_2_3.txt |
AC |
2231 ms |
13676 KB |
subtask_2_4.txt |
AC |
2241 ms |
13804 KB |
subtask_2_5.txt |
AC |
1818 ms |
800 KB |
subtask_2_6.txt |
AC |
1855 ms |
1272 KB |
subtask_2_7.txt |
AC |
1934 ms |
3444 KB |
subtask_2_8.txt |
AC |
2228 ms |
13548 KB |
subtask_3_1.txt |
TLE |
3156 ms |
14572 KB |
subtask_3_2.txt |
TLE |
3156 ms |
14952 KB |
subtask_3_3.txt |
TLE |
3155 ms |
2548 KB |
subtask_3_4.txt |
TLE |
3155 ms |
2804 KB |
subtask_3_5.txt |
TLE |
3156 ms |
9708 KB |
subtask_3_6.txt |
TLE |
3156 ms |
14700 KB |
subtask_3_7.txt |
TLE |
3156 ms |
14824 KB |
subtask_3_8.txt |
TLE |
3156 ms |
14568 KB |