洛谷 P1989 无向图三元环计数

晚上abc的G题考到了,听说是典中典
搞了一下O(m*sqrt(m))的写法
但是在atcoder超时,明天补bitset的写法

时间复杂度的证明

使用bitset的题解

#include<bits/stdc++.h>
using namespace std;

#define fr first
#define se second
#define et0 exit(0);

typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef unsigned long long ULL;

const int INF = 0X3f3f3f3f, N = 1e5 + 10, MOD = 1e9 + 7;
const double eps = 1e-7;

int vis[N];

vector<int> g[N];

void work() {
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y;
		scanf("%d %d",&x,&y);
		g[x].push_back(y);
		g[y].push_back(x);
	}
	
	int res=0;
	for(int i=1;i<=n;i++){
		for(int j:g[i])
			if(g[i].size()>g[j].size() || g[i].size()==g[j].size() && i<j)
				vis[j]=i;
		for(int j:g[i])
			if(g[i].size()>g[j].size() || g[i].size()==g[j].size() && i<j)
				for(int k:g[j])
					if(g[j].size()>g[k].size() || g[j].size()==g[k].size() && j<k)
						if(vis[k]==i)
							res++;
	}
	
	cout<<res<<endl;
}

signed main() {
	
	work();
	
	return 0;
}
posted @ 2022-07-03 01:27  xhy666  阅读(38)  评论(0)    收藏  举报