题解

9 条题解

  • -1
    @ 2018-10-30 14:30:17

    没有A掉。。。问了Au爷cwbc,他说这道题他也没A,并且给我玄了下半平面交,放一下70分做法
    跑spfa,记录到一个点走了几条x边时的最短路,如果不经过x边无法到达,而经过x边后可到达,那么显然有无数种,如果无论如何都不能到达,那么就无解
    之后枚举x边的长度,记录下最短路进行累加

    #include<iostream>
    #include<cstring>
    #include<vector>
    using namespace std;
    vector<int> q[510],p[510];
    int dui[300010],y[300010],pan[510][510],minn[510][510];
    char s[10];
    int main()
    {
        int n,m,i,j,k,u,v,len,num,e,a,b,head,tail,ha,now,d,ny,sum,ci,maxn,last;
        cin>>n>>m;
        for(i=1;i<=m;i++)
        {
            scanf("%d%d%s",&u,&v,s);
            len=strlen(s);
            q[u].push_back(v);
            if(s[0]>='0'&&s[0]<='9')
            {
                num=0;
                for(j=0;j<len;j++)
                {
                    num*=10;
                    num+=s[j]-'0';
                }
                p[u].push_back(num);
            }
            else
             p[u].push_back(-1);
        }
        cin>>e;
        for(j=1;j<=e;j++)
        {
            cin>>a>>b;
            memset(minn,-1,sizeof(minn));
            head=1;
            tail=1;
            minn[a][0]=0;
            dui[1]=a;
            pan[a][0]=1;
            y[1]=0;
            while(tail<=head)
            {   
                ha=dui[tail];
                d=q[ha].size();
                ny=y[tail];
                for(i=0;i<d;i++)
                {
                    now=q[ha][i];
                    if(p[ha][i]==-1)
                    {
                        if(ny<n)
                         if(minn[now][ny+1]>minn[ha][ny]||minn[now][ny+1]==-1)
                        {
                            minn[now][ny+1]=minn[ha][ny];
                            if(!pan[now][ny+1])
                            {
                                head++;
                                dui[head]=now;
                                y[head]=ny+1;
                                pan[now][ny+1]=1;
                            }
                        }
                        continue;
                    }
                    if(minn[now][ny]>minn[ha][ny]+p[ha][i]||minn[now][ny]==-1)
                    {
                        minn[now][ny]=minn[ha][ny]+p[ha][i];
                        if(!pan[now][ny])
                        {
                            head++;
                            dui[head]=now;
                            y[head]=ny;
                            pan[now][ny]=1;
                        }
                    }
                }
                pan[ha][ny]=0;
                tail++;
            }
            maxn=minn[b][0];
            if(maxn==-1)
            {
                for(i=1;i<=n;i++)
                 if(minn[b][i]!=-1)
                  break;
                if(i>n)
                 cout<<"0 0"<<endl;
                else
                 cout<<"inf"<<endl;
                continue;
            }
            sum=maxn;
            num=1;
            last=-2;
            for(i=1;;i++)
            {
                ci=0x3f3f3f3f;
                for(k=1;k<=n;k++)
                 if(minn[b][k]!=-1)
                  ci=min(ci,minn[b][k]+k*i);
                if(ci>=maxn)
                 break;
                if(ci!=last)
                {
                    num++;
                    sum+=ci;
                    last=ci;
                }
            }
            cout<<num<<" "<<sum<<endl;
        }
        return 0;
    }
    
  • -2
    @ 2016-03-13 15:56:52

    妈的发题解也不贴程序,楼下都是智障

    • @ 2016-03-13 15:57:31

      妈的我儿子CFL是智障

    • @ 2016-03-13 15:58:04

      妈的孙子Czh又不听话了

  • -2
    @ 2016-03-13 15:55:18

    妈的都是智障

  • -2
    @ 2016-03-13 15:55:00

    妈的楼下全他妈是智障

  • -2
    @ 2016-03-13 14:41:35

    妈的 楼下全是智障

  • -2
    @ 2016-03-13 14:37:25

    妈的 楼下一堆智障

  • -2
    @ 2016-03-13 14:35:29

    楼下妈的智障

  • -3
    @ 2016-03-13 15:59:29

    dfoi来撕逼

  • -3
    @ 2015-12-20 19:30:55

    虽然我没有AC但我来抢个沙发

  • 1

信息

ID
1800
难度
8
分类
(无)
标签
(无)
递交数
59
已通过
5
通过率
8%
被复制
1
上传者