Priori_Incantatem @ 2019-11-11 10:10:06
第一个点就WA了
Wrong Answer. wrong answer On line 1 column 1, read 3, expected 4.
这是第一个点:
输入:
10 4
4 1 3 5 6
3 3 5 6
3 1 5 9
5 4 5 6 7 9
正确的输出应该是4,评测姬说我输出的是3,可我本地测我的程序的确是输出的4,这究竟是什么问题?
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
const int Maxn=1020,inf=0x3f3f3f3f;
struct _queue{
int s[Maxn],l=1,r=0;
inline int size(){return r-l+1;}
inline int front(){return s[l];}
inline void push(int x){s[++r]=x;}
inline void pop(){l++;}
};
vector <int> e[Maxn];
int dis[Maxn],ind[Maxn];
bool g[Maxn][Maxn]; //g[i][j]表示点i与点j是否已经连边
int n,m,edgecnt,ans;
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0' && ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
return s*w;
}
void topo()
{
_queue q;
for(int i=1;i<=n;++i)
{
if(ind[i])continue;
dis[i]=1;
q.push(i);
}
while(q.size())
{
int x=q.front();
q.pop();
for(int i=0;i<e[x].size();++i)
{
int y=e[x][i];
if(!ind[y])continue;
ind[y]--;
if(dis[y]<dis[x]+1)dis[y]=dis[x]+1;
if(!ind[y])q.push(y);
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
n=read(),m=read();
for(int i=1;i<=m;++i)
{
int tot=read();
bool vis[Maxn];
for(int j=1;j<=tot;++j)
{
int x=read();
vis[x]=1;
}
for(int j=1;j<=n;++j)
{
if(vis[j])continue;
for(int k=1;k<=n;++k)
{
if(!vis[k] || j==k)continue;
if(g[j][k])continue;
e[j].push_back(k);
ind[k]++;
g[j][k]=1;
}
}
}
topo();
for(int i=1;i<=n;++i)
ans=max(ans,dis[i]);
printf("%d\n",ans);
return 0;
}
by fzwfzwfzw @ 2019-11-11 16:49:51
你的程序输出就是三啊
by Priori_Incantatem @ 2019-11-11 16:52:16
@一念之间、、
的确输出的是4
呀
by fzwfzwfzw @ 2019-11-11 18:07:57
我的c++告诉我这是 三
by fzwfzwfzw @ 2019-11-11 18:09:25
by fzwfzwfzw @ 2019-11-11 18:09:50
这是图片
by LZDQ @ 2019-11-12 12:34:44
@_Wolverine vis数组每次重定义要全部归零