90分...

P2055 [ZJOI2009] 假期的宿舍

难过('-')
by OCBun @ 2018-05-29 21:41:05


有那个dalao知道第一组数据是什么吗
by OCBun @ 2018-05-31 19:11:45


蒟蒻求助
by OCBun @ 2018-05-31 19:27:17


Σ(*゚д゚ノ)ノ
by OCBun @ 2018-05-31 20:17:59


烧了一晚上脑子,终于出来了。 应该是忽略了没有人在校的情况,用了那种写法,于是造成了无输出。。。
by OCBun @ 2018-05-31 21:17:29


总之,改了好几处,还参考了下题解。。。 修改后的代码。。。 ```cpp #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; const int maxn=110; int n,fndb[maxn],gvb[maxn],id[maxn],adm[maxn][maxn],link[maxn],used[maxn], cds[maxn]; void reda(){ int i,j; scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&id[i]); for (i=1;i<=n;i++){ int rec; scanf("%d",&rec); if (id[i]==0) continue; if (id[i]==1) if (rec==1) cds[i]=1; } for (i=1;i<=n;i++){ for (j=1;j<=n;j++){ scanf("%d",&adm[i][j]); } if (id[i]==1) adm[i][i]=1; } } void pre(){ reda(); for (int i=1;i<=n;i++){ if (cds[i]==0) {fndb[0]++;fndb[fndb[0]]=i;} if (id[i]==1) {gvb[0]++;gvb[gvb[0]]=i;} } } int hga(int x){ int i,j; for (i=1;i<=gvb[0];i++){ if ((adm[fndb[x]][gvb[i]])&&(used[i]==0)){ used[i]=1; if ((link[i]==0)||(hga(link[i]))){ link[i]=x; return 1; } } } return 0; } int judge(){ int i; for (i=1;i<=fndb[0];i++){ memset(used,0,sizeof(used)); if (hga(i)==0) return 0; } return 1; } int main(){ int i,j,t,k; scanf("%d",&t); for (k=1;k<=t;k++){ memset(fndb,0,sizeof(fndb)); memset(id,0,sizeof(id)); memset(gvb,0,sizeof(gvb)); memset(adm,0,sizeof(adm)); memset(link,0,sizeof(link)); memset(cds,0,sizeof(cds)); pre(); if (judge()) printf("^_^\n"); else printf("T_T\n"); } return 0; } ```
by OCBun @ 2018-05-31 21:23:14


|