Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <stdio.h>
- #include <set>
- #include <vector>
- #include <memory>
- #include <algorithm>
- #include <iomanip>
- #include <string>
- #include <cmath>
- #include <bitset>
- #include <map>
- #include <deque>
- #include <queue>
- #include <unordered_map>
- #include <stack>
- #include <random>
- #include <tuple>
- #include <string.h>
- #include <list>
- #include <unordered_set>
- #include <complex>
- using namespace std;
- using ll = long long int;
- using pp = pair<int, int>;
- using tt = tuple<int, int, int>;
- using ld = long double;
- const int inf = (int)1e9;
- const int mod = (int)1e9 + 7;
- //const int mod = 998244353;
- //const ll inf = (ll)1e18;
- #define umap unordered_map
- #define uset unordered_set
- #define Power ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
- #define all(x) x.begin(), x.end()
- #define len(x) (int)x.size()
- #define pb push_back
- random_device rd;
- mt19937_64 mers(rd());
- vector<vector<int>> t;
- vector<vector<int>> gr;
- vector<bool> used;
- vector<int> f, tin;
- int timer = 0;
- vector<bool> soch;
- vector<pp> pos;
- void dfs(int v, int p = -1) {
- f[v] = tin[v] = timer++;
- used[v] = true;
- int ch = 0;
- if (p != -1)
- gr[v].pb(p);
- for (auto to : t[v])
- if (!used[to]) {
- dfs(to, v);
- f[v] = min(f[v], f[to]);
- if (f[to] >= tin[v] && p != -1)
- soch[v] = true;
- else
- gr[v].pb(to);
- ch++;
- }
- else if(to != p)
- f[v] = min(f[v], tin[to]);
- if (p == -1 && ch > 1)
- soch[v] = true;
- }
- ld getangle(int a, int b, int v) {
- ld x1, x2, y1, y2;
- ld x, y;
- tie(x1, y1) = pos[a];
- tie(x2, y2) = pos[b];
- tie(x, y) = pos[v];
- }
- int main() {
- Power;
- #ifdef _DEBUG
- (void)freopen("input.txt", "r", stdin);
- (void)freopen("output.txt", "w", stdout);
- #else
- //(void)freopen("gangsters.in", "r", stdin);
- //(void)freopen("gangsters.out", "w", stdout);
- #endif
- int n, m;
- cin >> n >> m;
- pos.resize(n);
- for (int i = 0; i < n; i++)
- cin >> pos[i].first >> pos[i].second;
- t.resize(n);
- for (int i = 0; i < m; i++) {
- int a, b;
- cin >> a >> b;
- a--;
- b--;
- t[a].pb(b);
- t[b].pb(a);
- }
- used.assign(n, false);
- tin.assign(n, 0);
- f.assign(n, 0);
- soch.assign(n, false);
- timer = 0;
- dfs(0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement