wyc14 @ 2024-10-06 19:59:23
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1005;
int n, m, s, top, ans, tt[MAXN], st[MAXN], de[MAXN], str[MAXN], tuopu[MAXN][MAXN];
bool bo[MAXN], is[MAXN];
int main()
{
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; i++)
{
memset(is, 0, sizeof(is));
scanf("%d", &s);
for(int j = 1; j <= s; j++)
{
scanf("%d", &st[j]);
is[st[j]] = 1;
}
for(int j = str[1]; j <= st[s]; j++)
{
if(!is[j])
{
for(int k = 1; k <= s; k++)
{
if(!tuopu[j][st[k]])
{
tuopu[j][st[k]] = 1;
de[st[k]]++;
}
}
}
}
}
do
{
top = 0;
for(int i = 1; i <= n; i++)
{
if(de[i] == 0 && !bo[i])
{
tt[++top] = i;
bo[i] = 1;
}
}
for(int i = 1; i <= top; i++)
{
for(int j = 1; j <= n; j++)
{
if(tuopu[tt[i]][j])
{
tuopu[tt[i]][j] = 0;
de[j]--;
}
}
}
ans++;
}while(top);
printf("%d", ans - 1);
return 0;
}
by wyc14 @ 2024-10-06 20:00:59
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1005;
int n, m, s, top, ans, tt[MAXN], st[MAXN], de[MAXN], str[MAXN], tuopu[MAXN][MAXN];
bool bo[MAXN], is[MAXN];
int main()
{
cin >> n >> m;
for(int i = 1; i <= m; i++)
{
memset(is, 0, sizeof(is));
cin >> s;
for(int j = 1; j <= s; j++)
{
cin >> st[j];
is[st[j]] = 1;
}
for(int j = str[1]; j <= st[s]; j++)
{
if(!is[j])
{
for(int k = 1; k <= s; k++)
{
if(!tuopu[j][st[k]])
{
tuopu[j][st[k]] = 1;
de[st[k]]++;
}
}
}
}
do
{
top = 0;
for(int i = 1; i <= n; i++)
{
if(de[i] == 0 && !bo[i])
{
tt[++top] = i;
bo[i] = 1;
}
}
for(int i = 1; i <= top; i++)
{
for(int j = 1; j <= n; j++)
{
if(tuopu[tt[i]][j])
{
tuopu[tt[i]][j] = 0;
de[j]--;
}
}
}
ans++;
}while(top);
}
cout << ans - 1;
return 0;
}