(小汪汪:呜呜呜呜呜...人家...)
小汪汪用了 拓扑排序 但是只有80pts,WA了 # 5 # 6 ...(委屈...
到底哪里错了呀...(急得眼泪在眼眶里打转了嗷呜...
拜托大佬们给看看...(害羞得小脸泛红...
拜托各位大佬了...(汪汪~
下面这是小汪汪我的代码... 写的不好大佬们别骂小汪汪...(哭
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<bitset>
#include<queue>
using namespace std;
#define int long long
#define ri register int
#define rd(n) n=read()
const int N=200005;
inline int read()
{
register int ans=0,f=0;
register char c=getchar();
while(c<'0'||c>'9'){f^=(c=='-');c=getchar();}
while(c>='0'&&c<='9'){ans=(ans<<3)+(ans<<1)+(c^48);c=getchar();}
return f?-ans:ans;
}
inline void print(int n)
{
if(n<0){putchar('-');n=-n;}
if(n>9){print(n/10);}
putchar(n%10+'0');
}
struct Graph{
int ver,head,Next,deg,out;
#define ver(i) pic[i].ver
#define deg(i) pic[i].deg
#define out(i) pic[i].out
#define head(i) pic[i].head
#define Next(i) pic[i].Next
}pic[N<<2];
int n,m,k,tot,a[N];
queue<int>q;
inline void add(int x,int y)
{
ver(++tot)=y;
Next(tot)=head(x);
head(x)=tot;
deg(y)++; out(x)++;
}
int cnt,f[N];
int x,y,z,ans;
inline void topsort(void)
{
for(ri i=1;i<=n;++i)
if(deg(i)==0&&out(i))
{
q.push(i);
f[i]=1;
}
while(!q.empty())
{
ri x=q.front(); q.pop();
a[++cnt]=x;
for(ri i=head(x);i;i=Next(i))
{
ri y=ver(i); deg(y)--;
f[y]+=f[x];
if(!deg(y))
q.push(y);
}
}
}
signed main(void)
{
rd(n); rd(m);
for(ri i=1;i<=m;++i)
{
rd(x); rd(y);
add(y,x);
}
topsort();
for(ri i=1;i<=cnt;++i)
if(out(i)==0)
ans+=f[i];
print(ans);
return 0;
}
++++++++++++ 极度生草。。。文案来自同学@nian 但是不生草也没人看对叭?