萌新今天刚刚学oi,求助
查看原帖
萌新今天刚刚学oi,求助
306443
傅天宇楼主2020/7/9 20:07

萌新一直WA #1#8#9#10,不知道什么原因,有大佬知道吗/kel

#include<iostream>
#include<cstdio>
#include<queue>
#include<string.h>
using namespace std;
int n,k,dis[300005],cnt[300005];
int fir[300005],tot;
long long ans;
struct edge
{
    int nxt,to,val;
}e[300005];
int read()
{
    int a=0;
    char x=getchar();
    while(x<'0'||x>'9') x=getchar();
    while(x>='0'&&x<='9') a=(a<<3)+(a<<1)+x-48,x=getchar();
    return a;
}
void add(int u,int v,int w)
{
    e[++tot]={fir[u],v,w};fir[u]=tot;
}
bool vis[300005],flag;
queue<int>q;
void SPFA(int s)
{
    vis[s]=1;
    q.push(s);
    while(!q.empty())
    {
        int u=q.front();q.pop();
        vis[u]=0;
        for(int i=fir[u];i;i=e[i].nxt)
        {
            int v=e[i].to;
            if(dis[v]<dis[u]+e[i].val)
            {
                dis[v]=dis[u]+e[i].val;
                cnt[v]++;
                if(cnt[v]>=n)
                {
                    cout<<"-1";
                    flag=1;
                    return;
                }
                if(vis[v]==0)
                {
                    vis[v]=1;
                    q.push(v);
                }
            }
        }
    }
}
signed main()
{
    n=read();k=read();
    while(k--)
    {
        int opt,u,v;
        opt=read();u=read();v=read();
        if(opt==1) add(u,v,0),add(v,u,0);
        else if(opt==2) add(u,v,1);
        else if(opt==3) add(v,u,0);
        else if(opt==4) add(v,u,1);
        else add(v,u,0);
        if((u==v)&&(opt==2||opt==4))
        {
            cout<<"-1";
            return 0;
        }
    }
    for(int i=n;i>=1;i--) add(0,i,1);
    SPFA(0);
    if(flag) return 0;
    for(int i=1;i<=n;i++)
        ans+=dis[i];
    cout<<ans;
    return 0;
}

2020/7/9 20:07
加载中...