QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#641016 | #7737. Extending Distance | six-floor-slip-liu | WA | 0ms | 4084kb | C++20 | 3.8kb | 2024-10-14 17:41:35 | 2024-10-14 17:41:36 |
Judging History
answer
#include<bits/stdc++.h>
#define forup(i,s,e) for(int i=(s),E123123123=(e);i<=E123123123;++i)
#define fordown(i,s,e) for(int i=(s),E123123123=(e);i>=E123123123;--i)
#define mem(a,b) memset(a,b,sizeof(a))
#ifdef DEBUG
#define msg(args...) fprintf(stderr,args)
#else
#define msg(...) void();
#endif
using namespace std;
using i64=long long;
using pii=pair<int,int>;
#define fi first
#define se second
#define mkp make_pair
#define gc getchar()
int read(){
int x=0,f=1;char c;
while(!isdigit(c=gc)) if(c=='-') f=-1;
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc;}
return x*f;
}
#undef gc
const int N=3000,inf=0x3f3f3f3f;
int n,m,K,col[505][505],row[505][505];
vector<pii> e[N];
int ss,tt,dis[N],vis[N];
void dijkstra(){
priority_queue<pii,vector<pii>,greater<pii>> q;
mem(dis,0x3f);
dis[ss]=0;
q.push(mkp(dis[ss],ss));
while(q.size()){
int u=q.top().se;q.pop();
if(vis[u]) continue;
vis[u]=1;
for(auto i:e[u]){
int v=i.fi,w=i.se;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push(mkp(dis[v],v));
}
}
}
}
namespace flow{
struct edge{
int v,w,rst,nxt;
}e[N*16];
int head[N],incf[N],dis[N],pre[N],vis[N],cnte=1,s,t;
void adde(int u,int v,int w,int rst){
e[++cnte]=edge{v,w,rst,head[u]};head[u]=cnte;
e[++cnte]=edge{u,-w,0,head[v]};head[v]=cnte;
}
bool spfa(){
queue<int> q;
mem(dis,0x3f);
incf[t]=0;incf[s]=inf;
q.push(s);
dis[s]=0;vis[s]=1;
while(q.size()){
int u=q.front();q.pop();
vis[u]=0;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].v,w=e[i].w,rst=e[i].rst;
if(!rst||dis[v]<=dis[u]+w) continue;
dis[v]=dis[u]+w;pre[v]=i;
incf[v]=min(incf[u],rst);
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
return incf[t]!=0;
}
pii SSP(){
int mxf=0,mnc=0;
while(spfa()){
mxf+=incf[t];
for(int i=t;i!=s;i=e[pre[i]^1].v){
mnc+=incf[t]*e[pre[i]].w;
e[pre[i]].rst-=incf[t];
e[pre[i]^1].rst+=incf[t];
}
}
return mkp(mxf,mnc);
}
}
signed main(){
n=read();m=read();
forup(i,0,n-1){
forup(j,0,m-2){
col[i][j]=read();
e[i*m+j].push_back(mkp(i*m+j+1,col[i][j]));
e[i*m+j+1].push_back(mkp(i*m+j,col[i][j]));
}
}
forup(i,0,n-2){
forup(j,0,m-1){
row[i][j]=read();
e[i*m+j].push_back(mkp((i+1)*m+j,row[i][j]));
e[(i+1)*m+j].push_back(mkp(i*m+j,row[i][j]));
}
}
K=read();
ss=n*m;tt=ss+1;
forup(i,0,n-1){
e[ss].push_back(mkp(i*m,0));
e[(i+1)*m-1].push_back(mkp(tt,0));
}
dijkstra();
int p=(n-1)*(m-1),q=p+1;
flow::s=q+1;flow::t=flow::s+1;
forup(i,0,n-2){
forup(j,1,m-2){
int u=(j==0?p:i*(m-1)+j-1),v=(j==m-1?q:i*(m-1)+j);
flow::adde(u,v,0,row[i][j]);
flow::adde(v,u,0,row[i][j]);
flow::adde(u,v,1,inf);
flow::adde(v,u,1,inf);
}
}
forup(i,0,n-1){
forup(j,0,m-2){
int u=(i==0?p:(i-1)*(m-1)+j),v=(i==n-1?q:i*(m-1)+j);
flow::adde(u,v,0,col[i][j]);
flow::adde(v,u,0,col[i][j]);
flow::adde(u,v,1,inf);
flow::adde(v,u,1,inf);
}
}
flow::adde(flow::s,p,0,dis[tt]+K);
flow::adde(q,flow::t,0,dis[tt]+K);
pii res=flow::SSP();
printf("%d\n",res.se);
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 4084kb
input:
2 3 4 6 2 1 15 7 1 9 13 3 2 3 6 1 2 5 2 15 3 3 3 3 1 1 2 2 3 3 1 1 1 2 2 2
output:
11
result:
wrong output format Unexpected end of file - int64 expected (test case 1)