結果
問題 | No.119 旅行のツアーの問題 |
ユーザー |
![]() |
提出日時 | 2024-12-21 18:54:40 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 3 ms / 5,000 ms |
コード長 | 1,502 bytes |
コンパイル時間 | 1,486 ms |
コンパイル使用メモリ | 161,356 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-12-21 18:54:43 |
合計ジャッジ時間 | 2,470 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 19 |
ソースコード
#include<bits/stdc++.h>struct Edge{int v,nxt;int c;};#define MAXN 85#define MAXM 10005int n,m;int x,y;int s;Edge e[MAXM*2]; int h[MAXN],ec;int cur[MAXN],dis[MAXN];int qu[MAXN],fr,bk;int en;void adde(int u,int v,int c){e[ec].v=v,e[ec].nxt=h[u],e[ec].c=c;h[u]=ec; ++ec;return;}void addp(int u,int v,int c){// std::cout<<u<<' '<<v<<' '<<c<<'\n';adde(u,v,c),adde(v,u,0);return;}bool bfs(int s,int t){memset(dis,0x3f,sizeof(dis));qu[fr=bk=1]=s; dis[1]=0;while(fr<=bk){int u=qu[fr++];for(int i=h[u];i+1;i=e[i].nxt){int v=e[i].v;if(!e[i].c) continue;if(dis[u]+1<dis[v]) qu[++bk]=v,dis[v]=dis[u]+1;}}return dis[t]!=0x3f3f3f3f;}int dfs(int u,int t,int f){if(u==t) return f;int cnt=0;for(;cur[u]+1;cur[u]=e[cur[u]].nxt){int v=e[cur[u]].v; int c=e[cur[u]].c;if(dis[u]+1!=dis[v]||(!c)) continue;int now=dfs(v,t,std::min(f,c));f-=now,cnt+=now; e[cur[u]].c-=now,e[cur[u]^1].c+=now;if(!f) break;}return cnt;}int dinic(int s,int t){int res=0;while(bfs(s,t)){for(int i=1;i<=en;i++) cur[i]=h[i];res+=dfs(s,t,0x3f3f3f3f);}return res;}int main(){std::ios::sync_with_stdio(false);memset(h,-1,sizeof(h));std::cin>>n; en=2*n+2;for(int i=1;i<=n;i++){std::cin>>x>>y;addp(1,2*i,x),addp(2*i+1,2*n+2,y);s+=(x+y);addp(2*i,2*i+1,0x3f3f3f3f);}std::cin>>m;for(int i=1;i<=m;i++){std::cin>>x>>y; ++x,++y;addp(2*x,2*y+1,0x3f3f3f3f);}std::cout<<s-dinic(1,2*n+2)<<'\n';return 0;}