1 条题解

  • 0
    @ 2026-8-11 11:06:17

    考虑对都拥有元素 ii 的两个集合连一条边,发现会爆炸。

    考虑以前学过的圆方树,哦会了。

    #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
    上传者