CF~Good Bye 2014 B. New Year Permutation
来源:互联网 发布:wap手机图文列表源码 编辑:程序博客网 时间:2024/05/29 08:20
User ainta has a permutation p1, p2, ..., pn. As the New Year is coming, he wants to make his permutation as pretty as possible.
Permutation a1, a2, ..., an is prettier than permutation b1, b2, ..., bn, if and only if there exists an integer k (1 ≤ k ≤ n) where a1 = b1, a2 = b2, ..., ak - 1 = bk - 1 and ak < bk all holds.
As known, permutation p is so sensitive that it could be only modified by swapping two distinct elements. But swapping two elements is harder than you think. Given an n × n binary matrix A, user ainta can swap the values of pi and pj (1 ≤ i, j ≤ n, i ≠ j) if and only if Ai, j = 1.
Given the permutation p and the matrix A, user ainta wants to know the prettiest permutation that he can obtain.
The first line contains an integer n (1 ≤ n ≤ 300) — the size of the permutation p.
The second line contains n space-separated integers p1, p2, ..., pn — the permutation p that user ainta has. Each integer between 1 and n occurs exactly once in the given permutation.
Next n lines describe the matrix A. The i-th line contains n characters '0' or '1' and describes thei-th row of A. The j-th character of the i-th line Ai, j is the element on the intersection of the i-th row and the j-th column of A. It is guaranteed that, for all integers i, j where 1 ≤ i < j ≤ n, Ai, j = Aj, i holds. Also, for all integers i where 1 ≤ i ≤ n, Ai, i = 0 holds.
In the first and only line, print n space-separated integers, describing the prettiest permutation that can be obtained.
75 2 4 3 6 7 10001001000000000000101000001000000000100001001000
1 2 4 3 6 7 5
54 2 1 5 30010000011100100110101010
1 2 3 4 5
In the first sample, the swap needed to obtain the prettiest permutation is: (p1, p7).
In the second sample, the swaps needed to obtain the prettiest permutation is (p1, p3), (p4, p5), (p3, p4).
A permutation p is a sequence of integers p1, p2, ..., pn, consisting of n distinct positive integers, each of them doesn't exceed n. The i-th element of the permutation p is denoted as pi. The size of the permutation p is denoted as n.
题意:先给出一个数列P,再有一个“01”字符矩阵表示那些元素可以相互交换;求最perrty排列(就是要求字典序最小啦)。
题解:把所有直接或间接相连的弄成一个字集合,按贪心策略在集合元素原位置优先排集合最小的就OK了。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <cctype>#include <queue>#include <vector>#define INF 0x7fffffff#define eps (1e-9)#define mid 250#define maxn 199999999#define clearto(s,x) memset(s,x,sizeof(s))using namespace std;int n, m, tot=0;int per[309];int vis[309];char okc[309][309];queue<int> que;priority_queue<int, vector<int>, greater<int> > qloc;priority_queue<int, vector<int>, greater<int> > qnum;int main(){ //freopen("E:\DATA.txt","r",stdin); //int TT=1,tt+=1; scanf("%d",&TT); int i=0,j=0,k=0,t=0; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&per[i]); } for(k=1;k<=n;k++){ scanf("%s",okc[k]+1); } clearto(vis,0); for(i=1;i<=n;i++) { if(vis[i]) continue; vis[i]=1; //que.clear(); //qloc.clear(); qnum.clear(); que.push(i); while(!que.empty()){ int fa=que.front(); que.pop(); qloc.push(fa); qnum.push(per[fa]); for(k=1;k<=n;k++){ if(okc[fa][k]=='0') continue; if(vis[k]==1) continue; que.push(k); vis[k]=1; } } while(!qloc.empty()){ int f=qloc.top(); per[f]=qnum.top(); qloc.pop(); qnum.pop(); } } for(i=1;i<n;i++) printf("%d ",per[i]); printf("%d",per[n]); return 0;}
- CF~Good Bye 2014 B. New Year Permutation
- Good Bye 2014--B. New Year Permutation
- Good Bye 2014 B. New Year Permutation
- CodeForces 500B Good Bye 2014 New Year Permutation
- Good Bye 2014 B. New Year Permutation(并查集 ||Floyd )
- Good Bye 2014 B. New Year Permutation 并查集 最短路 floyed算法
- CF~Good Bye 2014 C. New Year Book Reading
- CF~Good Bye 2014 D. New Year Santa Network
- Good Bye 2013---B. New Year Present
- CF Good Bye 2015 B- New Year and Old Property(CF611B)
- Good Bye 2014 E. New Year Domino
- Good Bye 2014--A. New Year Transportation
- CF Good Bye 2015 A- New Year and Days(CF611A)
- CF Good Bye 2015 C- New Year and Domino(CF611C)
- B. New Year Permutation (CF)
- CF 500B New Year Permutation
- CF - 500B New Year Permutation
- 【Good Bye 2014B】【Floyd or 并查集】New Year Permutation 全排列有位置交换序列 使得字典序尽可能小
- Unity引擎制作仿《文明》游戏
- ubuntu系统用户密码忘记了怎么办
- time_t
- linux select与poll实现机制与实例分析
- 子进程模块subprocess
- CF~Good Bye 2014 B. New Year Permutation
- 五子棋Pro-最好玩的五子棋游戏
- 「转」IEEE802.11数据帧在Linux上的抓取
- hdoj1012
- 盘点国内网站常用的一些 CDN 公共库加速服务
- R语言及其学习资源
- 6个有用的MySQL语句
- 如何拯救你,我的猿猿君?
- 计算机方向的一些顶级会议和期刊(转载)