邻接表去重的小鸡巧

可以用一个map数组记录边存了没有

最简单好写的

数据范围\(m<=5e4\)

map<pair<int,int>,bool> uni;
for(int u,v,i=1;i<=m;i++)
{
	cin>>u>>v;
	if(uni[{u,v}])
		continue;
	uni[{u,v}]=uni[{v,u}]=1;
	G[u].push_back(v);
	G[v].push_back(u);
}

稍微难一点但是可以大一点数据

数据范围\(m<=2e5\)
需要压一个位

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
auto encode(int a,int b)
{
	if(a>b)
		swap(a,b);
	return (1ll*a<<32)|b;
}
unordered_set<long long> edge;
vector<int> G[N];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int u,v,i=1;i<=m;i++)
	{
		cin>>u>>v;
		long long key=encode(u,v);
		if(edge.count(key))
			continue;
		edge.insert(key);
		G[u].push_back(v);
		G[v].push_back(u);
	}
}

注:这些代码都是无向图的,有向图自己改一下。

posted @ 2025-08-28 10:10  wtnbl  阅读(8)  评论(0)    收藏  举报