Submission #1010236

#TimeUsernameProblemLanguageResultExecution timeMemory
1010236vjudge1Visiting Singapore (NOI20_visitingsingapore)C++17
0 / 100
2075 ms1280 KiB
#include<bits/stdc++.h> using namespace std; #define int ll #define ll long long const int maxn=900,maxm=5000,inf=777000100; int n,m,k,ss,tt,SS,TT; bool hasmins[maxn],hasmint[maxn]; int mins[maxn],mint[maxn]; int he[maxn],ne[maxm],to[maxm],fr[maxm],cnt=1; int w[maxm],A[maxn],B[maxn],C[maxn]; inline void addedge(int x,int y,int z){ ne[++cnt]=he[x],he[x]=cnt,to[cnt]=y,w[cnt]=z,fr[cnt]=x; ne[++cnt]=he[y],he[y]=cnt,to[cnt]=x,w[cnt]=0,fr[cnt]=y; } int dis[maxn]; int bfs(int S,int T){ memset(dis,0,sizeof dis); queue<int>q;q.push(S);dis[S]=1; while(q.size()){ int x=q.front(); q.pop(); for(int i=he[x];i;i=ne[i]){ if(w[i]&&dis[to[i]]==0){ dis[to[i]]=dis[x]+1; q.push(to[i]); } } } return dis[T]; } int cur[maxn]; ll dfs(int x,ll flow,int T){ if(x==T||flow==0)return flow; ll ans=0; for(int i=cur[x];i&&ans<flow;i=ne[i]){ cur[x]=i; if(w[i]&&dis[to[i]]==dis[x]+1){ ll qwq=dfs(to[i],min(flow-ans,(ll)w[i]),T); ans+=qwq; w[i]-=qwq,w[i^1]+=qwq; } } return ans; } ll dinic(int S,int T){ ll ans=0; while(bfs(S,T)){ memcpy(cur,he,sizeof cur); ans+=dfs(S,inf,T); } return ans; } int iscut[maxm],vis[maxn];//edge id/2 void dfs(int x){ if(vis[x])return; vis[x]=1; for(int i=he[x];i;i=ne[i]){ if(w[i]&&!vis[to[i]])dfs(to[i]); } } void findcut(int S,int T){ memset(iscut,0,sizeof iscut); memset(vis,0,sizeof vis); dfs(S); for(int i=2;i<=cnt;i+=2){ if(!vis[to[i]]&&vis[fr[i]]) iscut[i/2]=1; } } struct node{ int c[maxn],nl;ll val; bool operator<(const node&a)const {return val>a.val;} void build(){ memset(he,0,sizeof he); cnt=1; for(int i=1;i<=m;i++){ addedge(A[i],B[i],C[i]); } addedge(SS,ss,inf); addedge(tt,TT,inf); for(int i=1;i<=nl;i++){ if(c[i])addedge(SS,i,inf); else addedge(i,TT,inf); } val=dinic(SS,TT); memset(vis,0,sizeof vis); dfs(SS); for(int i=1;i<=n;i++) c[i]=vis[i]; } void clear(){ memset(c,0,sizeof c);nl=val=0; } }; priority_queue<node>q; main(){ scanf("%lld%lld%lld",&n,&m,&k); scanf("%lld%lld",&ss,&tt); SS=n+1,TT=SS+1; for(int i=1;i<=m;i++){ int a,b,c; scanf("%lld%lld%lld",&a,&b,&c); A[i]=a,B[i]=b,C[i]=c; } node emm,emmm; emm.nl=0,emm.c[ss]=1;emm.build(); q.push(emm); while(--k){ emm=q.top();q.pop(); for(int i=emm.nl+1;i<=n;i++){ emmm.clear(),emmm.nl=i,emmm.c[i]=1-emm.c[i]; for(int j=1;j<i;j++)emmm.c[j]=emm.c[j]; emmm.build(),q.push(emmm); } } printf("%lld\n",q.top().val); return 0; }

Compilation message (stderr)

VisitingSingapore.cpp:98:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   98 | main(){
      | ^~~~
VisitingSingapore.cpp: In function 'int main()':
VisitingSingapore.cpp:99:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   99 |  scanf("%lld%lld%lld",&n,&m,&k);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
VisitingSingapore.cpp:100:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  100 |  scanf("%lld%lld",&ss,&tt);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~
VisitingSingapore.cpp:104:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  104 |   scanf("%lld%lld%lld",&a,&b,&c);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...