1 条题解
-
0
考虑对都拥有元素 的两个集合连一条边,发现会爆炸。
考虑以前学过的圆方树,哦会了。
#include<bits/stdc++.h> using namespace std; #define PII pair<int,int> const int N=1e6+10; vector<int>G[N]; int n,m,st,ed,dis[N],vis[N]; void dij() { priority_queue<PII,vector<PII>,greater<PII> >q; memset(dis,0x3f,sizeof(dis));dis[st]=0; q.push({0,st}); while(!q.empty()) { int x=q.top().second;q.pop(); if(vis[x])continue;vis[x]=1; for(int y:G[x]) { if(dis[y]>dis[x]+1) dis[y]=dis[x]+1,q.push({dis[y],y}); } } } signed main() { cin>>n>>m; for(int i=1;i<=n;i++) { int k;cin>>k; for(int j=1;j<=k;j++) { int x;cin>>x; G[x].push_back(i+m); G[i+m].push_back(x); } } st=1;dij(); cout<<(dis[m]==0x3f3f3f3f?-1:dis[m]/2-1); return 0; }
- 1
信息
- ID
- 9539
- 时间
- 3000ms
- 内存
- 1024MiB
- 难度
- 8
- 标签
- 递交数
- 21
- 已通过
- 4
- 上传者