DengTJ @ 2018-11-08 19:28:47
把数据下载到本地linux系统上测是可以出结果的,然额交上去全部RE。
#include<bits/stdc++.h>
using namespace std;
#define maxm 1233
#define maxn maxm
#define fir first
#define sec second
#define pii pair<int,int>
queue<pii>q;
int cnt[maxn],head[maxn],tot,n,m,ans;
bool vis[maxn],pd[maxn][maxn];
vector<int>g[maxn];
struct node{
int s,a[maxn];
}stat[maxm];
struct mode{
int u,v,next;
}e[maxm<<1];
inline void add_edge(int u,int v)
{
e[++tot].u=u;
e[tot].v=v;
e[tot].next=head[u];
head[u]=tot;
}
inline void read(int &x)
{
x=0;char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9'){
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
}
}
inline int top()
{
for(int i=1;i<=n;i++)
if(cnt[i]==0)
q.push(make_pair(i,1));
ans=1;
while(q.size())
{
int u=q.front().fir,val=q.front().sec;
q.pop();
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
cnt[v]--;
if(cnt[v]==0)
{
q.push(make_pair(v,val+1));
ans=max(ans,val+1);
}
}
}
}
int main()
{
read(n);read(m);
for(int i=1;i<=m;i++)
{
memset(vis,0,sizeof(vis));
read(stat[i].s);
for(int j=1;j<=stat[i].s;j++)
{
read(stat[i].a[j]);
vis[stat[i].a[j]]=true;
}
for(int j=stat[i].a[1];j<=stat[i].a[stat[i].s];j++)
{
if(vis[j]) continue;
for(int k=1;k<=stat[i].s;k++)
if(!pd[j][stat[i].a[k]])
{
cnt[stat[i].a[k]]++;
g[j].push_back(stat[i].a[k]);
pd[j][stat[i].a[k]]=true;
}
}
}
top();
cout<<ans<<endl;
return 0;
}
by DengTJ @ 2018-11-08 19:30:08
大召唤师算法!!
@HNYLMS_EndSaH @HNYLMS_MuQiuFeng @HNYLMS_Tea @GCCCCCCCCC @心水湛清
by GCCCCCCCCC @ 2018-11-08 19:37:34
然而我并不会写这道题也不懂RE ovo
by DengTJ @ 2018-11-08 19:37:46
问题已解决,感谢小火车巨佬orz orz @HNYLMS_Tea
问题在于int函数没有返回值,把top函数类型改成void就好了。