QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#69984#4437. Link with RunningBowieSHIWA 800ms21220kbC++143.9kb2023-01-03 17:44:312023-01-03 17:44:33

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-01-03 17:44:33]
  • 评测
  • 测评结果:WA
  • 用时:800ms
  • 内存:21220kb
  • [2023-01-03 17:44:31]
  • 提交

answer

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<queue>
#define INF 1e18
#define MAXN 300010
using namespace std;
#define int long long
typedef long long ll;
struct edge{
    int v,w,c,nxt;
}e[MAXN<<1];
struct Node{
    int x;
    ll d;
    bool operator < (const Node &rhs) const
    {
        return d>rhs.d;
    }
};
int n,m,t,cnt;
int head[MAXN],deg[MAXN];
ll dis[MAXN],C[MAXN];
priority_queue<Node>Q;
bool used[MAXN];
void add (int u,int v,int w,int c)
{
    e[cnt].v=v;
    e[cnt].w=w;
    e[cnt].c=c;
    e[cnt].nxt=head[u];
    head[u]=cnt++;
}
vector<int>V;
void dfs (int u,bool flag)
{
    used[u]=1;
    for (int i=head[u];i!=-1;i=e[i].nxt)
        if (e[i].w==0)
        {
            if (!(flag&(e[i].c==0))) deg[e[i].v]++;
            if (used[e[i].v]) return;
            dfs (e[i].v,flag&(e[i].c==0));
        }
}
bool DFS (int u,bool fl)
{
    used[u]=1;
    bool flag=0;
    for (int i=head[u];i!=-1;i=e[i].nxt)
        if (e[i].w==0)
        {
            if (e[i].v==1)
            {
                printf ("ahah: %d",fl&(e[i].c==0));
                return 1;
            }
            if (used[e[i].v]) return 0;
            if (DFS (e[i].v,fl&(e[i].c==0))) return 1;
        }
    return 0;
}
queue<int>q;
void dij ()
{
    dis[1]=0,C[1]=0;
    Q.push ((Node){1,dis[1]});
    while (1)
    {
        ll dd=-1;
        while (!Q.empty ())
        {
            int u=Q.top().x;
            if (used[u]) Q.pop ();
            else
            {
                dd=dis[u];
                break;
            }
        }
        if (dd==-1||Q.empty ()) break;
        V.clear ();
        while (!Q.empty())
        {
            int u=Q.top().x;
            if (dis[u]!=dd) break;
            Q.pop ();
            if (used[u]) continue;
            V.push_back (u);
            used[u]=1;
        }
        // if (t==6)

        // for (int i=1;i<=n;i++)
        //     if (used[i])
        //         cout<<i<<"* "<<endl;
        for (int i=0;i<V.size ();i++)
            dfs (V[i],1);
        for (int i=0;i<V.size ();i++)
            if (deg[V[i]]==0) q.push (V[i]);
        if (t==6) cout<<"deg: "<<deg[1]<<endl;
        while (!q.empty ())
        {
            int u=q.front();
            cout<<u<<" ";
            q.pop ();
            for (int i=head[u];i!=-1;i=e[i].nxt)
                if (e[i].w==0)
                {
                    deg[e[i].v]--;
                    if (dis[e[i].v]>dis[u]+e[i].w||(dis[e[i].v]==dis[u]+e[i].w&&C[e[i].v]<C[u]+e[i].c))
                    {
                        dis[e[i].v]=dis[u]+e[i].w;
                        C[e[i].v]=C[u]+e[i].c;
                    }
                    if (deg[e[i].v]==0) q.push (e[i].v);
                }
                else
                {
                    if (dis[e[i].v]>dis[u]+e[i].w||(dis[e[i].v]==dis[u]+e[i].w&&C[e[i].v]<C[u]+e[i].c))
                    {
                        dis[e[i].v]=dis[u]+e[i].w;
                        C[e[i].v]=C[u]+e[i].c;
                        Q.push (((Node){e[i].v,dis[e[i].v]}));
                    }
                }
        }
    }
}
signed main()
{
    scanf ("%lld",&t);
    while (t--)
    {
        cnt=0;
        memset (used,0,sizeof (used));
        memset (deg,0,sizeof (deg));
        scanf ("%lld%lld",&n,&m);
        for (int i=1;i<=n;i++) head[i]=-1;
        for (int i=1;i<=m;i++)
        {
            int u,v,w,c;
            scanf ("%lld%lld%lld%lld",&u,&v,&w,&c);
            add (u,v,w,c);
        }
        for (int i=1;i<=n;i++) dis[i]=INF,C[i]=-INF;
        if (t==6)
        {
            if (DFS (1,1)) printf ("FUck");
            memset (used,0,sizeof (used));
        }
        dij ();
        printf ("%lld %lld\n",dis[n],C[n]);
    }
    return 0;
}
/*
2
3 3
1 2 1 1
2 3 1 1
1 3 2 0
3 3
1 2 1 1
2 3 1 1
1 3 1 0
*/

詳細信息

Test #1:

score: 0
Wrong Answer
time: 800ms
memory: 21220kb

input:

12
100000 200000
1 2 838279516 902819511
1 3 293478832 513256010
2 4 682688353 204481674
2 5 360092507 651108247
5 6 519851939 323803002
6 7 675439277 205804465
7 8 419167205 386168059
6 9 140767493 382483305
9 10 558115401 613738466
9 11 902235661 744659643
9 12 851394758 1720015
12 13 635355827 46...

output:

1 82723 90640 3 52842 2 82726 64622 91213 68240 5 64624 46916 82729 4 50562 82732 26432 49769 86167 52845 64625 46919 6 91214 91929 46917 48265 14595 9 64626 64628 64627 97396 55426 38272 86814 86169 82735 64630 86817 64048 91932 49772 24423 97398 9851 10387 48266 32593 46920 44785 39724 86820 32594...

result:

wrong answer 1st lines differ - expected: '5927443549 11285847934', found: '1 82723 90640 3 52842 2 82726 ...21 26723 5927443549 11285847934'