[汪汪求助] 呼叫总部 这里是小汪汪 俺也遇到麻烦了...
查看原帖
[汪汪求助] 呼叫总部 这里是小汪汪 俺也遇到麻烦了...
749325
Sincerin楼主2023/7/16 16:38

(小汪汪:呜呜呜呜呜...人家...)

小汪汪用了 拓扑排序 但是只有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 但是不生草也没人看对叭?

https://www.luogu.com.cn/discuss/635034

2023/7/16 16:38
加载中...