#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<functional> #include<vector> #include<queue> #include<stack> #include<map> #include<set> typedef long long LL; typedef unsigned long long ULL; using namespace std; int group[305]; char s[305][305]; int a[305]; vector<int>ans[305]; int find_group(int x) { if(x==group[x])return x; return group[x]=find_group(group[x]); } void merge_group(int x,int y){ int e=find_group(x); int r=find_group(y); if(e!=r)group[e]=r; } int main() { int n; while(scanf("%d",&n)!=EOF){ for(int i=0;i<n+1;i++){group[i]=i;ans[i].clear();} for(int i=0;i<n;i++)cin>>a[i]; for(int i=0;i<n;i++){ cin>>s[i]; } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(s[i][j]=='1')merge_group(a[i],a[j]); } } for(int i=0;i<n;i++){ ans[find_group(a[i])].push_back(a[i]); } for(int i=1;i<n+1;i++)sort(ans[i].begin(),ans[i].end()); int t=find_group(a[0]); printf("%d",ans[t][0]); int cnt[305]; memset(cnt,0,sizeof(cnt)); cnt[t]=1; for(int i=1;i<n;i++){ int r=find_group(a[i]); printf(" %d",ans[r][cnt[r]++]); } printf("\n"); } return 0; }
codeforces500B
最新推荐文章于 2019-08-02 14:44:46 发布