vijos1023 Victoria的舞会3

来源:互联网 发布:京东店铺销量数据 编辑:程序博客网 时间:2024/06/05 18:31

这道题我用的是floyd预处理,并查集的思想。虽然实现很简单,但是有很多细节问题还是值得认真研究的。

https://www.vijos.org/p/1023

先上一下我之前错的代码:

//#include<bits/stdc++.h>#include<iostream>#include<algorithm>#include<cmath>#include<cstdio>#include<map>#include<vector>#include<set>#include<cstring>#include<sstream>#include<cctype>#include<stack>#include<queue>#define ll long long#define st string#define INF 100000000#define N 1005#define lc 2*k#define rc 2*k+1#define mem(x) memset(x,0,sizeof(x))using namespace std;int Max(int _,int __){ return _>__? _:__;}int Min(int _,int __){ return _<__? _:__;}bool a[205][205];int n;void floyd(){for(int k=1;k<=n;k++) {for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) {if(a[i][k]&&a[k][j]) a[i][j]=1;}}}}bool v[205];int main(){//freopen(".in","r",stdin);//freopen(".out","w",stdout);mem(a);mem(v);scanf("%d",&n);for(int i=1;i<=n;i++) {int x;while(scanf("%d",&x)&&x) a[i][x]=1;}floyd();int ans=0;for(int i=1;i<=n;i++) {if(!v[i]) {for(int j=1;j<=n;j++) {if(a[i][j]&&!v[j]) {v[j]=1;//printf("%d %d\n",i,j);}}v[i]=1;ans++;}}printf("%d\n",ans);return 0;}/*18011 000016 014 00002 13 0011 07 006 000*/


过个样例还是很简单的,但是交上去只对了一个点。看似评测的错误,实际上其实程序问题还是很明显的。

floyd的时候一定会出现a[1][1]=1的情况,而实际上这并不应该。解决方法又是特别智障。

//#include<bits/stdc++.h>#include<iostream>#include<algorithm>#include<cmath>#include<cstdio>#include<map>#include<vector>#include<set>#include<cstring>#include<sstream>#include<cctype>#include<stack>#include<queue>#define ll long long#define st string#define INF 1e9#define N 1005#define lc 2*k#define rc 2*k+1#define mem(x) memset(x,0,sizeof(x))using namespace std;bool a[205][205];int n;void floyd(){for(int k=1;k<=n;k++) {for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) {if(a[i][k]&&a[k][j] && i!=j) a[i][j]=1;}}}}bool v[205];int main(){mem(a);mem(v);scanf("%d",&n);for(int i=1;i<=n;i++) {int x;while(scanf("%d",&x)&&x) a[i][x]=1;}floyd();int ans=0;for(int i=1;i<=n;i++) if(!v[i]) for(int j=1;j<=n;j++) if( a[i][j] && !v[j])v[j]=1;for (int i=1;i<=n;i++)if (!v[i]) ans++;printf("%d\n",ans);return 0;}/*18011 000016 014 00002 13 0011 07 006 000*/


这么智障的题,我本来打算愉悦身心的。结果还是贾老师帮忙调的。无语……

原创粉丝点击