一个小疑惑

P2055 [ZJOI2009] 假期的宿舍

本蒟蒻习惯用 ```cpp #define fo(i,a,b) for(int i=(a);i<=(b);i++) ```
by YxYe @ 2023-08-10 11:04:12


同求,有答案麻烦也@我一下,谢谢
by ccxswl @ 2023-08-17 10:45:07


@[YxYe](/user/481153) 可以发下你的完整代码吗,我和你问题一样,我改过了
by ccxswl @ 2023-08-17 11:23:23


@[ccxswl](/user/726992) ```cpp #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<stack> #include<queue> #define ll long long #define db double #define fo(i,a,b) for(int i=(a);i<=(b);i++) #define fp(i,a,b) for(int i=(a);i<(b);i++) #define de(i,a,b) for(int i=(a);i>=(b);i--) #define fs(i,u) for(int i=head[u];i;i=nxt[i]) #define pii pair<int, int> #define pdd pair<db,db> #define fir first #define sec second #define ls (now<<1) #define rs (now<<1|1) #define mid ((l+r)>>1) #define lowbit(x) (x&(-x)) using namespace std; char buf[1<<21],*p1=buf,*p2=buf; inline int getc(){ return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++; } inline int read(){ int x=0,f=1;char ch=getc(); while(!isdigit(ch)){ if(ch=='-')f=-1; ch=getc(); } while(isdigit(ch)){ x=(x<<1)+(x<<3)+(ch^48); ch=getc(); } return x*f; } const int maxn=1e5+10; int T,n; int head[maxn],to[maxn],nxt[maxn],cnt,fa[maxn]; void add_e(int u,int v){ to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt; } bool school[maxn],home[maxn],vis[maxn]; bool dfs(int u){ fs(i,u){ int v=to[i]; if(!vis[i]){ vis[i]=1; if(!fa[v]||dfs(fa[v])){ fa[v]=u; return true; } } } return false; } int main(){ //freopen(".in","r",stdin); //freopen(".out","w",stdout); T=read(); while(T--){ memset(fa,0,sizeof(fa)); memset(head,0,sizeof(head)); n=read(); fo(i,1,n)school[i]=read(); fo(i,1,n)home[i]=(read()&&school[i]); fo(i,1,n){ if(school[i]&&!home[i])add_e(i,i); fo(j,1,n){ int x=read(); if(x&&school[j])add_e(i,j); } } bool flag=true; fo(i,1,n){ if(!home[i]){ memset(vis,0,sizeof(vis)); if(!dfs(i)){ flag=false; break; } } } if(flag){ puts("^_^"); }else{ puts("T_T"); } } return 0; } ```
by YxYe @ 2023-08-17 20:00:34


|