QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#80440 | #1359. Setting Maps | XZTmaxsmall67 | WA | 0ms | 3628kb | C++23 | 2.1kb | 2023-02-23 18:32:42 | 2023-02-23 18:32:43 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,inf=1e18;
struct MaxFlow
{
int tot;
int head[N],now[N];
struct Edge{int to,nxt,flw;}e[N<<1];
void ADD(int x,int y,int flw){e[++tot]={y,head[x],flw};head[x]=tot;}
void add(int x,int y,int flw){ADD(x,y,flw);ADD(y,x,0);}
int n,S,T,mxflw;
void clear(){n=S=T=mxflw=0;tot=1;}
MaxFlow(){clear();}
int dep[N];
int bfs()
{
for(int i=1;i<=n;i++)dep[i]=inf,now[i]=head[i];
queue<int>q;q.push(S);
dep[S]=1;
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=head[x];i;i=e[i].nxt)
{
int y=e[i].to,flw=e[i].flw;
if(!flw||dep[y]!=inf)continue;
q.push(y);dep[y]=dep[x]+1;
}
}
return dep[T]!=inf;
}
int dfs(int x,int flow)
{
if(x==T)return flow;
int res=0;
for(int &i=now[x];i&&flow;i=e[i].nxt)
{
int y=e[i].to,flw=e[i].flw;
if(!flw||dep[y]!=dep[x]+1)continue;
int bck=dfs(y,min(flow,flw));
if(!bck){dep[y]=inf;continue;}
e[i].flw-=bck;e[i^1].flw+=bck;
res+=bck;flow-=bck;
}
return res;
}
int MF(int _n,int _S,int _T)
{
n=_n,S=_S,T=_T;mxflw=0;
while(bfs())mxflw+=dfs(S,inf);
return mxflw;
}
}G;
const int M=10;
int n,m,k,S,T,st,en,tot;
int c[N];
int in[N][M],out[N][M];
signed main()
{
scanf("%lld%lld%lld%lld%lld",&n,&m,&k,&st,&en);
for(int i=1,w;i<=n;i++)
{
scanf("%lld",&w);
for(int j=0;j<k;j++)
{
in[i][j]=++tot,out[i][j]=++tot;G.add(in[i][j],out[i][j],w);
if(j)G.add(in[i][j-1],out[i][j],inf),G.add(in[i][j-1],in[i][j],inf),G.add(out[i][j-1],out[i][j],inf);
}
}
S=++tot,T=++tot;
G.add(S,in[st][0],1e9);
for(int j=0;j<k;j++)G.add(out[en][j],T,inf);
for(int i=1,x,y;i<=m;i++)
{
scanf("%lld%lld",&x,&y);
for(int j=0;j<k;j++)G.add(out[x][j],in[y][j],inf),G.add(out[y][j],in[x][j],inf);
}
if(G.MF(tot,S,T)==inf)return puts("-1"),0;
vector<int>vt;
for(int i=1;i<=n;i++)
for(int j=0;j<k;j++)
if((G.dep[in[i][j]]!=inf)&&(G.dep[out[i][j]]==inf)){vt.push_back(i);break;}
printf("%lld\n",(int)vt.size());
for(auto y:vt)printf("%lld ",y);puts("");
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3628kb
input:
3 2 5 1 3 1 60 35 1 2 2 3
output:
0
result:
wrong answer Given vertex set from user output does not cover k vertices in some path