QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#525783 | #1359. Setting Maps | zhicheng | WA | 1ms | 7856kb | C++14 | 2.0kb | 2024-08-20 22:30:23 | 2024-08-20 22:30:23 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2010,M=200010;
int k,dess,viss[N],tot=1,minu,maxu,vis[N],cur[N],lev[N],src,des,first[N],nnext[M],to[M];
ll w[M],ww[M];
queue<int>q;
vector<int>v[N];
vector<int>anss;
void add(int x,int y,ll z){
nnext[++tot]=first[x];
first[x]=tot;
to[tot]=y;
w[tot]=z;
}
bool bfs(){
int u;
while(!q.empty()){
q.pop();
}
for(int i=minu;i<=maxu;i++){
cur[i]=first[i];
lev[i]=-1;
}
lev[src]=0;
q.push(src);
while(!q.empty()){
u=q.front();
q.pop();
for(int e=first[u];e;e=nnext[e]){
if(w[e]&&lev[to[e]]==-1){
lev[to[e]]=lev[u]+1;
q.push(to[e]);
if(to[e]==des){
return 1;
}
}
}
}
return 0;
}
ll dinic(int u,ll flow){
ll res=0,delta;
if(u==des){
return flow;
}
for(int &e=cur[u];e;e=nnext[e]){
if(w[e]&&lev[to[e]]>lev[u]){
delta=dinic(to[e],min(flow-res,w[e]));
if(delta){
w[e]-=delta;
w[e^1]+=delta;
res+=delta;
if(flow==res){
break;
}
}
}
}
if(flow!=res){
lev[u]=-1;
}
return res;
}
void dfss(int u,int now){
if(u==dess&&now<k){
printf("-1");
exit(0);
}
if(now>=k){
return;
}
viss[u]=1;
for(auto i:v[u]){
if(!viss[i]){
dfss(i,now+1);
}
}
viss[u]=0;
}
int main(){
int n,m,a,b;
ll ans=0;
scanf("%d%d%d%d%d",&n,&m,&k,&src,&des);
minu=1;
maxu=n*2*k;
dess=des;
des+=(k-1)*n*2+n;
for(int i=1;i<=n;i++){
scanf("%d",&a);
for(int j=1;j<=k;j++){
add((j-1)*2*n+i,(j-1)*2*n+i+n,a);
add((j-1)*2*n+i+n,(j-1)*2*n+i,0);
}
}
while(m--){
scanf("%d%d",&a,&b);
v[a].push_back(b);
for(int i=1;i<=k;i++){
add((i-1)*2*n+a+n,(i-1)*2*n+b,1e18);
add((i-1)*2*n+b,(i-1)*2*n+a+n,0);
}
}
for(int i=1;i<=k-1;i++){
for(int j=1;j<=n;j++){
add((i-1)*2*n+j,i*2*n+j+n,1e18);
add(i*2*n+j+n,(i-1)*2*n+j,0);
}
}
dfss(src,1);
while(bfs()){
ans+=dinic(src,1e18);
}
printf("%lld",ans);
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 7856kb
input:
3 2 5 1 3 1 60 35 1 2 2 3
output:
-1
result:
ok answer = IMPOSSIBLE
Test #2:
score: -100
Wrong Answer
time: 1ms
memory: 5888kb
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:
39
result:
wrong answer Integer parameter [name=p; number of vertices] equals to 39, violates the range [-1, 7]