Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ve vector
- #define ll long long
- #define fi first
- #define se second
- #define all(x) x.begin(), x.end()
- using namespace std;
- const int MAXN = 100;
- ve<int> g[MAXN];
- int dp0[MAXN];
- int dp1[MAXN][MAXN];
- int dp2[MAXN][MAXN][MAXN];
- bool dp3[MAXN][MAXN][MAXN][MAXN];
- ll res = 0;
- #pragma GCC optimize("Ofast")
- void solve(){
- int n, m;
- cin >> n >> m;
- for(int i = 0; i < m; i++){
- int a, b;
- cin >> a >> b;
- a--; b--;
- g[a].push_back(b);
- g[b].push_back(a);
- }
- ve<int> prev;
- for(int v = 0; v < n; v++){
- for(auto a : g[v])
- for(auto b : g[a]){
- if(b == v) continue;
- for(auto c : g[b]){
- if(c == v || c == a) continue;
- dp3[v][a][b][c] = 1;
- dp0[v]++;
- dp1[v][a]++;
- dp1[v][b]++;
- dp1[v][c]++;
- dp2[v][a][b]++;
- dp2[v][a][c]++;
- dp2[v][b][c]++;
- }
- }
- }
- for(int v = 0; v < n; v++){
- for(auto a : g[v])
- for(auto b : g[a]){
- if(b == v) continue;
- for(auto c : g[b]){
- if(c == v || c == a) continue;
- int cans = dp0[v];
- cans -= dp1[v][a];
- cans -= dp1[v][b];
- cans -= dp1[v][c];
- cans += dp2[v][a][b];
- cans += dp2[v][b][a];
- cans += dp2[v][a][c];
- cans += dp2[v][c][a];
- cans += dp2[v][b][c];
- cans += dp2[v][c][b];
- cans -= dp3[v][a][b][c];
- cans -= dp3[v][a][c][b];
- cans -= dp3[v][b][a][c];
- cans -= dp3[v][b][c][a];
- cans -= dp3[v][c][a][b];
- cans -= dp3[v][c][b][a];
- res += cans;
- }
- }
- }
- cout << res << "\n";
- }
- signed main(){
- ios_base::sync_with_stdio(0);
- int T = 1;
- // cin >> T;
- while(T--){
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement