zoukankan      html  css  js  c++  java
  • CF 500B New Year Permutation

    传送门

    题目大意

    给你一个数列,再给你一个矩阵,矩阵的(i,j)如果为1就表示可以将i,j位置上的数交换,问任意交换之后使原数列字典序最小并输出。

    解题思路

    因为如果i与j能交换,j与k能交换,那么i与k相当于能直接交换,所以我们先使用传递闭包求出所有可以交换的情况。之后从第一个位置开始贪心,看它能跟后面哪个小于它的数交换。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    const int MAXN = 305;
    
    int dp[MAXN][MAXN];
    int n,st[MAXN];
    
    inline void floyd(){
        for(register int k=1;k<=n;k++)
            for(register int i=1;i<=n;i++)
                for(register int j=1;j<=n;j++)
                    dp[i][j]|=dp[i][k]&dp[k][j];
    }
    
    int main(){
        scanf("%d",&n);
        for(register int i=1;i<=n;i++) scanf("%d",&st[i]);
        for(register int i=1;i<=n;i++){
            char c[MAXN];
            scanf("%s",c+1);
            for(register int j=1;j<=n;j++)
                dp[i][j]=c[j]-'0';
        }
        floyd();
        for(register int i=1;i<=n;i++)
            for(register int j=i+1;j<=n;j++)
                if(dp[i][j] && st[j]<st[i])
                    swap(st[j],st[i]);
        for(register int i=1;i<=n;i++) printf("%d ",st[i]);
        return 0;
    }
  • 相关阅读:
    【转】PHP操作MongoDB【NoSQL】
    web前端响应式
    CSS Hack
    ES6特性
    zepto.js使用前注意
    移动端 isScroll自定义实现
    严格模式use strict
    node.js和express.js安装和使用步骤 [windows]
    JSONP理解和使用
    require.js+backbone.js基本使用
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9676951.html
Copyright © 2011-2022 走看看