Submission #162616

#TimeUsernameProblemLanguageResultExecution timeMemory
162616samzhangPlaninarenje (COCI18_planinarenje)C++17
160 / 160
12 ms2296 KiB
#include "bits/stdc++.h" //#include "ext/pb_ds/tree_policy.hpp" //#include "ext/pb_ds/assoc_container.hpp" #define PB push_back #define PF push_front #define LB lower_bound #define UB upper_bound #define fr(x) freopen(x,"r",stdin) #define fw(x) freopen(x,"w",stdout) #define iout(x) printf("%d\n",x) #define lout(x) printf("%lld\n",x) #define REP(x,l,u) for(ll x = l;x<u;x++) #define RREP(x,l,u) for(ll x = l;x>=u;x--) #define complete_unique(a) a.erase(unique(a.begin(),a.end()),a.end()) #define mst(x,a) memset(x,a,sizeof(x)) #define all(a) a.begin(),a.end() #define PII pair<int,int> #define PLL pair<ll,ll> #define MP make_pair #define sqr(x) ((x)*(x)) #define lowbit(x) (x&(-x)) #define lson (ind<<1) #define rson (ind<<1|1) #define se second #define fi first #define dbg(x) cerr<<#x<<" = "<<(x)<<endl; #define sz(x) ((int)x.size()) #define EX0 exit(0); typedef long long ll; typedef unsigned long long ull; typedef double db; typedef long double ld; using namespace std; const int block_size = 320; typedef complex<ll> point; const ll mod = 1e9+7; const ll inf = 1e9+7; const ld eps = 1e-9; const db PI = atan(1)*4; template<typename T> inline int sign(const T&a) { if(a<0)return -1; if(a>0)return 1; return 0; } template<typename T> inline void in(T &x) { x = 0; T f = 1; char ch = getchar(); while (!isdigit(ch)) { if (ch == '-') f = -1; ch = getchar(); } while (isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); } x *= f; } ll twop(int x) { return 1LL<<x; } template<typename A,typename B > inline void in(A&x,B&y) { in(x); in(y); } template<typename A,typename B,typename C>inline void in(A&x,B&y,C&z) { in(x); in(y); in(z); } template<typename A,typename B,typename C,typename D> inline void in(A&x,B&y,C&z,D&d) { in(x); in(y); in(z); in(d); } template <class T> void upd(T&a,T b) { a = max(a,b); } int n,m; namespace maxFlow { const int maxn = 10010, maxe = 100010,source = 10010-1,sink = 10010-2; int cnt = 0; struct edge { int from,to,cap; edge(int a,int b,int c):from(a),to(b),cap(c) {} edge() { from = to = cap = 0; } }; vector<int>g[maxn]; edge e[maxe]; void clear() { cnt = 0; REP(i,0,maxn)g[i].clear(); REP(i,0,maxe)e[i] = edge(); } void addEdge(int u,int v,int cap) { int cur = cnt; e[cur] = edge(u,v,cap); g[u].PB(cur); e[cur^1] = edge(v,u,0); g[v].PB(cur^1); cnt+=2; } void init(){ clear(); REP(i,0,m){ int u,v;in(u,v); addEdge(u, n+v,1); } REP(i,1,n+1){ addEdge(source, i, 1); } REP(i,1,n+1){ addEdge(n+ i,sink, 1); } } int lvl[maxn],cur[maxn]; bool bfs(int start = source) { mst(lvl, -1); mst(cur,0); lvl[start] = 0; queue<int>q; q.push(start); while(sz(q)) { int f = q.front(); q.pop(); for(auto curEdge:g[f]) { auto &E = e[curEdge]; if(E.cap) { if(lvl[E.to] == -1) { lvl[E.to] = lvl[f]+1; q.push(E.to); } } } } return lvl[sink]!=-1; } int dfs(int curNode,int curCap) { if(!curCap || curNode == sink)return curCap; int ans = 0; for(int& i = cur[curNode]; i<sz(g[curNode]); i++) { int curEdge = g[curNode][i]; if(lvl[e[curEdge].to]>lvl[curNode]) { int delta = dfs(e[curEdge].to,min(e[curEdge].cap,curCap)); ans+=delta; curCap-=delta; e[curEdge].cap-=delta; e[curEdge^1].cap+=delta; if(!curCap)break; } } return ans; } ll dinic() { ll ans = 0; while (bfs()) { ans+=(dfs(source, inf)); } return ans; } void work(){ dinic(); bfs(); int ans = n; REP(i,1,n+1){ if(lvl[i]==-1){ printf("Slavko\n"); }else{ printf("Mirko\n"); } } } } int main(){ // fr("/Users/zhangqingchuan/Desktop/cp/cp/input.txt"); in(n,m); maxFlow::init(); maxFlow::work(); return 0; }

Compilation message (stderr)

planinarenje.cpp: In function 'void maxFlow::work()':
planinarenje.cpp:187:13: warning: unused variable 'ans' [-Wunused-variable]
         int ans = n;
             ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...