QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#69994 | #4437. Link with Running | BowieSHI | WA | 998ms | 24948kb | C++14 | 3.6kb | 2023-01-03 17:56:37 | 2023-01-03 17:56:40 |
Judging History
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 (used[e[i].v]&&!(flag&(e[i].c==0)||!used[e[i].v]))
deg[e[i].v]++;
if (used[e[i].v]) return;
dfs (e[i].v,flag&(e[i].c==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;
}
for (int i=0;i<V.size ();i++)
dfs (V[i],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++)
if (deg[V[i]]==0) q.push (V[i]);
if (t==6) cout<<"deg: "<<used[n]<<endl;
while (!q.empty ())
{
int u=q.front();
q.pop ();
for (int i=head[u];i!=-1;i=e[i].nxt)
if (e[i].w==0)
{
deg[e[i].v]--;
if (t==6)
{
if (e[i].v==n) cout<<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;
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;
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
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 998ms
memory: 24948kb
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:
5927443549 11285847934 2529348 325344428756 2522027 438209666288 250100947 25049026205784 249512452 24966236662852 1* 2959* 3654* 4034* 4182* 4755* 4780* 4935* 5053* 5229* 5376* 5682* 5687* 5744* 5832* 5882* 5957* 6012* 6062* 6269* 6444* 6679* 6693* 6710* 6738* 6807* 6847* ...
result:
wrong answer 6th lines differ - expected: '0 9535132634', found: '1* '