D
参考
dfs那里很妙:队列i和local成对子,一起pop后要继续搜loca,因为i在退出dfs后会继续在while里判断,如果还有又进dfs;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define pb push_back
#define fi first
#define se second
#define mem(a,x) memset(a,x,sizeof(a));
#define db double
const int N=2e5+10;
queue<int>q[N];
int vis[N];
unordered_map<int,int>mp;
void dfs(int i)
{
int loca=mp[q[i].front()];
q[loca].pop();
q[i].pop();
while(q[loca].size()&&vis[q[loca].front()])
{
dfs(loca);
}
if(q[loca].size())
{
vis[q[loca].front()]=1;
mp[q[loca].front()]=loca;
}
}
int main()
{
int n,m;cin>>n>>m;
for(int i=0;i<m;i++)
{
int k;cin>>k;
for(int j=0;j<k;j++)
{
int t;cin>>t;q[i].push(t);
}
}
for(int i=0;i<m;i++)
{
while(q[i].size()&&vis[q[i].front()])
{
dfs(i);
}
if(q[i].size())
{
vis[q[i].front()]=1;
mp[q[i].front()]=i;
}
}
int flag=1;
for(int i=0;i<m;i++)
{
if(q[i].size())
{
flag=0;break;
}
}
if(flag) cout<<"Yes";
else cout<<"No";
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)