Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <map>
- using std::vector;
- vector<int> graph[60000];
- bool used[60000];
- int timer, tin[60000], fup[60000];
- long long answer = 1000000000000;
- std::map<std::pair<int, int>, long long> costs;
- void dfs(int vertex, int parent = -1) {
- used[vertex] = true;
- tin[vertex] = fup[vertex] = timer++;
- for (size_t i = 0; i < graph[vertex].size(); ++i) {
- int to = graph[vertex][i];
- if (to == parent) continue;
- if (used[to])
- fup[vertex] = std::min(fup[vertex], tin[to]);
- else {
- dfs(to, vertex);
- fup[vertex] = std::min(fup[vertex], fup[to]);
- if (fup[to] > tin[vertex]) {
- answer = std::min(answer, costs[std::make_pair(vertex, to)]);
- }
- }
- }
- }
- void find_bridges(int n_size) {
- timer = 0;
- for (int i = 0; i < n_size; ++i)
- used[i] = false;
- for (int i = 0; i < n_size; ++i)
- if (!used[i])
- dfs(i);
- }
- int main() {
- int n_size, m_size;
- std::cin >> n_size >> m_size;
- int a_city, b_city, cost;
- while (m_size--) {
- std::cin >> a_city >> b_city >> cost;
- graph[a_city - 1].push_back(b_city - 1);
- graph[b_city - 1].push_back(a_city - 1);
- costs[std::make_pair(a_city - 1, b_city - 1)] = cost;
- costs[std::make_pair(b_city - 1, a_city - 1)] = cost;
- }
- find_bridges(n_size);
- if (answer == 1000000000000) {
- answer = -1;
- }
- std::cout << answer;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement