CodeVs 2833 奇怪的梦境

思路 : 判断拓扑排序中是否有环,以及最终入度不为零的点有几个

从总数n中,每找到一个入度为零的点,n--,判断最终n的值即可。开始时候T了,竟然是因为边数组开小了。。。。为何不是RE啊!!!

AC代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define pi acos(-1.0)
#define eps 1e-8
typedef long long ll;
using namespace std;
const int maxn=10005;
int in[maxn],vis[maxn],head[maxn],cnt,tot,n;
queue  q;
struct edge
{
    int v,next;
} E[3*maxn];
void init()
{
    cnt=0;
    memset(vis,0,sizeof(vis));
    memset(in,0,sizeof(in));
    memset(head,-1,sizeof(head));

}
void add_edge(int u,int v)
{
    E[cnt].v=v;
    E[cnt].next=head[u];
    head[u]=cnt++;
}
void toposort()
{
    int i,j,k;
    for(i=1; i<=n; i++)
        if(in[i]==0) q.push(i),in[i]--;
    while(!q.empty())
    {
        int j=q.front();
        q.pop();
        for(int k=head[j]; k!=-1; k=E[k].next)
        {
            int tmp=E[k].v;
            in[tmp]--;
            if(in[tmp]==0) q.push(tmp),in[tmp]--;
        }
        tot--;

    }
}

int main()
{
    init();
    int i,m,u,v;
    scanf("%d%d",&n,&m);
    for(i=0; i


你可能感兴趣的:(ACM)