有几个地方sb了,但是还是全T
现在的代码
```cpp
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define _min(a,b) ((a)<(b)?(a):(b))
using namespace std;
inline int read(){
register int x=0,f=0,ch=getchar();
while('0'>ch||ch>'9')f^=ch=='-',ch=getchar();
while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
return f?-x:x;
}
queue<int>q;
const int MAX=1005,INF=1e9;
struct E{
int e,next,w;
}e[MAX<<1];
int cnt=2,cur[MAX],head[MAX],dep[MAX];
int t,n;
int op[MAX],x,S,T,tot;
inline void add(int u,int v,int w){
e[cnt]=(E){v,head[u],w};head[u]=cnt++;
e[cnt]=(E){u,head[v],0};head[v]=cnt++;
}
int dfs(int x,int t,int mflow){
if(x==t||mflow==0)return mflow;
register int flow=0,res=0;
for(register int i=cur[x];i;i=e[i].next){
cur[x]=i;
if(dep[e[i].e]==dep[x]+1){
res=dfs(e[i].e,t,_min(mflow,e[i].w));
if(res){
flow+=res;mflow-=res;
e[i].w-=res,e[i^1].w+=res;
if(mflow==0)break;
}
}
}
return flow;
}
inline bool bfs(int s,int t){
for(register int i=0;i<=T;++i)cur[i]=head[i],dep[i]=0;
dep[s]=1;while(!q.empty())q.pop();q.push(s);
while(!q.empty()){
x=q.front();
q.pop();
for(register int i=head[x];i;i=e[i].next){
if(!dep[e[i].e]&&e[i].w){
dep[e[i].e]=dep[x]+1;
q.push(e[i].e);
}
}
}
return dep[t]>0;
}
int ans;
inline int dinic(){
while(bfs(S,T))ans+=dfs(S,T,INF);
return ans;
}
inline void build(){
cnt=2;tot=0;
n=read();S=0,T=n<<1|1;
for(register int i=1;i<=n;++i){
op[i]=read();
if(op[i]==1)add(i+n,T,1);
}
for(register int i=1;i<=n;++i){
if(op[i]==0||(op[i]==1&&read()==0))add(S,i,1),++tot;
}
for(register int i=1;i<=n;++i){
for(register int j=1;j<=n;++j){
if(read()==1||i==j)add(i,j+n,1);
}
}
}
signed main(){
t=read();
while(t--){
build();
if(dinic()==tot)puts("^_^");
else puts("T_T");
}
return 0;
}
```
by EEchoyukii @ 2020-04-06 22:44:20
网络瘤可海星。
by xh39 @ 2020-04-06 22:58:57
~~qndmx~~
by _Zhumingrui @ 2020-04-06 23:12:58
Orz
by jwcub @ 2020-04-07 08:05:12
~~qndmx~~ Orz
by stdout @ 2020-04-07 08:59:06