QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#326297 | #1359. Setting Maps | C1942huangjiaxu | WA | 1ms | 3956kb | C++14 | 1.6kb | 2024-02-12 19:57:55 | 2024-02-12 19:57:55 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5,M=1e5+5,inf=2e9+7;
int n,m,k,s,t,S,T,maxflow;
int hd[N],d[N],cur[N],w[2*M],to[2*M],nx[2*M],num=1;
bool vis[N];
void add(int x,int y,int z){
nx[++num]=hd[x],hd[x]=num,to[num]=y,w[num]=z;
nx[++num]=hd[y],hd[y]=num,to[num]=x,w[num]=0;
}
bool bfs(){
queue<int>q;
for(int i=1;i<=T;++i)d[i]=0;
d[S]=1,q.push(S);
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=hd[u],v;v=to[i],i;i=nx[i])if(w[i]&&!d[v]){
d[v]=d[u]+1;
if(v==T)return true;
q.push(v);
}
}
return false;
}
int dinic(int nw,int flow){
if(nw==T)return flow;
int rest=flow,k;
for(int &i=cur[nw];i;i=nx[i])if(w[i]&&d[to[i]]==d[nw]+1){
k=dinic(to[i],min(w[i],rest));
if(!k)d[to[i]]=0;
w[i]-=k,w[i^1]+=k,rest-=k;
if(!rest)return flow;
}
return flow-rest;
}
void dfs(int x){
vis[x]=true;
for(int i=hd[x],v;v=to[i],i;i=nx[i])if(!vis[v]&&w[i])dfs(v);
}
int main(){
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
S=k*n*2+1,T=S+1;
for(int i=1,c;i<=n;++i){
scanf("%d",&c);
for(int j=1;j<k;++j)add(2*n*(j-1)+2*i-1,2*n*j+2*i,inf);
for(int j=0;j<k;++j)add(2*n*j+2*i-1,2*n*j+2*i,c);
}
for(int i=1,x,y;i<=m;++i){
scanf("%d%d",&x,&y);
for(int j=0;j<k;++j)add(2*n*j+2*x,2*n*j+2*y-1,inf);
}
add(S,2*s-1,inf);
for(int i=0;i<k;++i)add(2*n*i+2*t,T,inf);
while(bfs()){
for(int i=1;i<=T;++i)cur[i]=hd[i];
maxflow+=dinic(S,inf);
}
if(maxflow>=inf)return puts("-1"),0;
dfs(S);
vector<int>tmp;
for(int i=1;i<=n;++i)for(int j=0;j<k;++j)if(vis[2*n*j+2*i-1]!=vis[2*n*j+2*i])tmp.push_back(i);
printf("%d\n",tmp.size());
for(auto v:tmp)printf("%d ",v);
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 3956kb
input:
3 2 5 1 3 1 60 35 1 2 2 3
output:
-1
result:
ok answer = IMPOSSIBLE
Test #2:
score: 0
Accepted
time: 1ms
memory: 3744kb
input:
7 11 1 1 7 100 5 7 16 11 12 100 1 2 1 3 1 4 1 5 2 3 2 6 3 6 4 3 4 7 5 7 6 7
output:
4 2 3 4 5
result:
ok answer = 39
Test #3:
score: -100
Wrong Answer
time: 1ms
memory: 3780kb
input:
11 17 2 1 11 1000 10 10 10 10 10 10 10 10 10 1000 1 2 1 3 1 4 1 5 1 6 2 7 3 7 4 7 5 8 6 8 7 8 7 9 7 10 8 9 8 11 9 11 10 11
output:
7 1 5 6 7 8 9 10
result:
wrong answer User answer is not optimal; judge: 60, user: 1060