求调玄关
查看原帖
求调玄关
866154
fcy20180201楼主2024/5/5 16:14

WA*33

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int n,m,res;
ll ans;
struct node{
	int num,c,id;
}b[200005];
bool operator <(const node &x,const node &y){return x.c<y.c;}
vector<int>a[200005],bl[200005];
bool vis[200005],vis2[200005],vis3[200005];
void dfs(int u){
	vis[u]=true;
	for(int v:a[u])if(!vis3[v]){
		vis3[v]=true,res++;
		for(int x:bl[v])if(!vis[x])dfs(x);
	}
	return ;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&b[i].num,&b[i].c),b[i].id=i;
		for(int j=0;j<b[i].num;j++){
			int x;scanf("%d",&x);
			a[i].push_back(x),bl[x].push_back(i);
		}
	}
	dfs(1);
	if(res<n){puts("-1");return 0;}
	sort(b+1,b+m+1);
	for(int i=1;i<=m;i++)for(int u:a[b[i].id])if(!vis2[u])vis2[u]=true,ans+=b[i].c;
	printf("%lld",ans-b[1].c);
	return 0;
}
2024/5/5 16:14
加载中...