Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
24014 liuyile 【BJ】T3 C++ 解答错误 0 2000 MS 140484 KB 3861 2023-12-07 21:21:04

Tests(0/50):


//LYLAKIOI #include <iostream> #include <cstdio> #include <math.h> #include <algorithm> #include <istream> #include <string> #include <queue> #include <deque> #include <random> #include <stack> #include <set> #include <string.h> #include <map> #include <unordered_map> #include <sstream> #include <bitset> #include <fstream> #include <climits> #include <time.h> #include <cassert> using namespace std; //#include "atcoder/all" // using namespace atcoder; //#pragma GCC optimize(3) //#pragma GCC optimize("Ofast") #define endl "\n" #define int long long #define double long double #define pii pair<int, int> #define p1(x) (x).first #define p2(x) (x).second #define lc(x) ((x) << 1) #define rc(x) ((x) << 1 | 1) #define i128 __int128_t vector<pii>g[400300]; vector<int>t[400300]; int d[400300]; int u[400300],v[400300],w[400300]; int n,m; inline bool bfs(int S,int T){ memset(d,-1,sizeof(d)); d[S]=0; queue<int>q; q.push(S); while(!q.empty()){ int u=q.front(); q.pop(); for(auto e:g[u]){ int v=p1(e),w=p2(e); if(w&&d[v]==-1){ d[v]=d[u]+1; q.push(v); } } } return d[T]!=-1; } bool vis[400300]; int nw[400300]; inline int dfs(int u,int fl,int T){ if(vis[u])return 0; if(!fl||u==T)return fl; vis[u]=1; int res=0; int k=g[u].size(); for(;nw[u]<k;nw[u]++){ if(!fl)break; int i=nw[u]; int v=p1(g[u][i]),w=p2(g[u][i]); int tmp=dfs(v,min(w,fl),T); res+=tmp; p2(g[v][t[u][i]])+=tmp; p2(g[u][i])-=tmp; fl-=tmp; } vis[u]=0; return res; } const int INF=1e13; inline int dinic(int S,int T){ int RES=0; while(bfs(S,T)){ memset(nw,0,sizeof(nw)); RES+=dfs(S,INF,T); } return RES; } inline void add(int u,int v,int w){ t[u].push_back(g[v].size()); t[v].push_back(g[u].size()); g[u].push_back({v,w}); g[v].push_back({u,0}); } bool ch[400300]; inline int MWCSG(int n,vector<int>A,vector<pii>E){ int S=n,T=n+1; int SM=0; for(auto e:E) add(p1(e),p2(e),INF); for(int i=0;i<n;i++) if(A[i]<0) add(i,T,-A[i]); else if(A[i]>0)add(S,i,A[i]),SM+=A[i]; // for(int i=0;i<=n+1;i++) // for(pii e:g[i]) // cout<<i<<" "<<p1(e)<<" "<<p2(e)<<endl; // cout<<endl; int r=dinic(S,T); for(int i=0;i<=n+1;i++) // for(pii e:g[i]){ // cout<<i<<" "<<p1(e)<<" "<<p2(e)<<endl; // } for(int i=0;i<=n+1;i++) for(pii e:g[i]) if(i==S){ if(!p2(e)) ch[p1(e)]=1; } else if(!p2(e)&&p1(e)==T) ch[i]=1; return SM-r; } inline void slv(){ int tr=0; cin>>n>>m>>tr; vector<pii>E; vector<int>A(n+m); for(int i=0;i<m;i++){ cin>>u[i]>>v[i]>>w[i]; u[i]--,v[i]--; E.push_back({u[i],v[i]}); E.push_back({u[i],n+i}); E.push_back({n+i,v[i]}); w[i]=max(0ll,w[i]); A[v[i]]+=w[i]; A[n+i]=-w[i]; } cout<<MWCSG(n+m,A,E)<<endl; vector<int>ANS; // for(int i=0;i<n+m;i++) // cout<<ch[i]<<" "; // cout<<endl; for(int i=0;i<m;i++) if(w[i]>0&&ch[u[i]]&&!ch[v[i]]) ANS.push_back(i+1); cout<<ANS.size()<<endl; for(int x:ANS)cout<<x<<" "; cout<<endl; } inline void MT(){ int t; cin>>t; while(t--)slv(); } signed main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); // freopen("/Users/noip2019/Downloads/ex_sequence3.in","r",stdin); // MT(); slv(); cout.flush(); return 0; } /* 13 0 1 0 0 0 0 1 0 1 1 0 1 0 */


测评信息: