Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- //
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- int main() {
- cin.sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- int n, m; cin >> n >> m;
- ll cnt=0;
- vector<int> v[n+1];
- for (int i=1; i<=m; i++)
- {
- int a, b; cin >> a >> b;
- v[a].push_back(b);
- v[b].push_back(a);
- }
- bool visited[n+1]; for (int i=1; i<=n; i++) visited[i]=false;
- for (int i=1; i<=n; i++) sort(v[i].begin(),v[i].end());
- queue<int> q; q.push(1);
- while (!q.empty())
- {
- int a=q.front(); q.pop();
- if (visited[a]) continue;
- unordered_map<int,bool> done;
- for (int i=0; i<v[a].size(); i++)
- {
- int b=v[a][i];
- if (visited[b]) continue;
- for (int j=0; j<v[b].size(); j++)
- {
- int c=v[b][j];
- if (visited[c]||done[c]) continue;
- vector<int>::iterator low=lower_bound(v[a].begin(),v[a].end(),c);
- if (low!=v[a].end()&&*low==c)
- {
- // cout << a << " " << b << " " << c << endl;
- cnt++;
- }
- // for (int k=0; k<v[c].size(); k++) if (v[c][k]==a) cnt++;
- }
- done[b]=true;
- }
- visited[a]=true;
- for (int i=0; i<v[a].size(); i++)
- {
- int b=v[a][i];
- q.push(b);
- }
- }
- cout << cnt << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement