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
AC × 2
AC × 12
AC × 21
AC × 23
TLE × 8
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