QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#91199 | #3249. 分组作业 | INFiNiTE_ENERZY | WA | 8ms | 6340kb | C++14 | 2.5kb | 2023-03-27 17:21:36 | 2023-03-27 17:21:39 |
Judging History
answer
//P8215
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const long long inf = 1e17;
int n, m, hd[N], eg[N], nx[N], tot = 1;
int dep[N], now[N];
long long ln[N];
void add(int x, int y, long long z){
eg[++tot] = y;
ln[tot] = z;
nx[tot] = hd[x];
hd[x] = tot;
eg[++tot] = x;
ln[tot] = 0;
nx[tot] = hd[y];
hd[y] = tot;
}
bool bfs(int s, int t){
memset(dep, 0, sizeof(dep));
memcpy(now, hd, sizeof(hd));
queue<int> q;
q.push(s);
dep[s] = 1;
while(!q.empty()){
int x = q.front();
q.pop();
for(int i = hd[x]; i; i = nx[i]){
int y = eg[i];
long long z = ln[i];
if(!dep[y] && z){
dep[y] = dep[x] + 1;
q.push(y);
if(y == t){
return true;
}
}
}
}
return false;
}
long long dfs(int x, int t, long long flow){
if(x == t){
return flow;
}
long long rest = flow;
for(int i = now[x]; i; i = nx[i]){
int y = eg[i];
long long z = ln[i];
now[x] = i;
if(z && dep[y] == dep[x] + 1){
long long k = dfs(y, t, min(z, rest));
if(!k){
dep[y] = 0;
}
ln[i] -= k;
ln[i^1] += k;
rest -= k;
}
}
return flow - rest;
}
long long dinic(int s, int t){
long long mf = 0, tmp = 0;
while(bfs(s, t)){
while(tmp = dfs(s, t, inf)){
mf += tmp;
}
}
return mf;
}
int xid[N];
typedef long long ll;
int s = 0, t = 100000;
int main(){
scanf("%d%d",&n,&m);
n*=2;
// init();
for(int i=1;i<=n;i++)
{
ll C,D,E;
scanf("%lld%lld%lld",&C,&D,&E);
add(s,i,D);
add(i,s,0);
add(i,t,C);
add(t,i,0);
int v=(i&1)?i+1:i-1;
add(i,v,E);
add(v,i,0);
}
for(int i=1;i<=n;i+=2)
{
int u=n+(i+1)/2;
add(u,i,1e17);
add(i,u,0);
add(u,i+1,1e17);
add(i+1,u,0);
xid[i]=u;
xid[i+1]=u;
}
for(int i=1;i<=m;i++)
{
int x,y;
ll a,b;
scanf("%d%d%lld%lld",&x,&y,&a,&b);
int u1=xid[y],v1=xid[x];
add(u1,x,b);
add(x,u1,0);
add(y,v1,a);
add(v1,y,0);
}
printf("%lld\n",dinic(s, t));
// scanf("%d%d", &n, &m);
// int s = 3 * n + 1, t = 3 * n + 2;
// #define p(x) (n+n+ceil((x)/2.0))
// for(int i = 1; i <= n + n; ++ i){
// int c, d, e;
// scanf("%d%d%d", &c, &d, &e);
// add(s, i, d);
// add(i, t, c);
// add(p(i), i, inf);
// if(i & 1){
// add(i, i+1, e);
// } else {
// add(i, i-1, e);
// }
// }
// for(int i = 1; i <= m; ++ i){
// int A, B, a, b;
// scanf("%d%d%d%d", &A, &B, &a, &b);
// add(B, p(A), a);
// add(A, p(B), b);
// }
// printf("%lld\n", dinic(s, t));
// return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 8ms
memory: 6340kb
input:
5000 10000 23060775 12 2 255978380 28 517 5 6624 26 151149 45131806 23849036 489 484971 24970 162846 1993316 188305 56311199 2003 211 1 50534913 517527 364913 882765 298 71 26 122914059 13 65459 18150033 20 607 8 380059068 3873712 228 9813 5449 6370 3309369 37410691 8 181 1 62340851 1705 4 107 8 209...
output:
0
result:
wrong answer 1st lines differ - expected: '22929674417', found: '0'