zoukankan      html  css  js  c++  java
  • 【置换群】poj3270 Cow Sorting

    并不应该叫置换群……只是用到了置换而已,并没有群。

    题解看这个吧,我就不写了:http://www.cnblogs.com/kuangbin/archive/2012/09/03/2669013.html

    证明的话可以自己手撸几组数据模拟一下,比较容易。

    复杂度O(n)。

    算是个经典题吧?

    #include<cstdio>
    #include<vector>
    #include<algorithm>
    using namespace std;
    #define INF 2147483647
    vector<int>vs[10010];
    struct data{
    	int p,v;
    }t[10010];
    bool cmp(const data &a,const data &b){
    	return a.v<b.v;
    }
    int n,e,ma[10010],minn=INF,ans,t1,t2,minx;
    bool vis[10010];
    int a[10010];
    void dfs(int U){
    	vis[U]=1;
    	minx=min(minx,ma[U]);
    	if(!vis[a[U]]){
    		dfs(a[U]);
    	}
    	t1+=(minx+ma[U]);
    	t2+=(minn+ma[U]);
    }
    int main(){
    //	freopen("poj3270.in","r",stdin);
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i){
    		scanf("%d",&t[i].v);
    		t[i].p=i;
    		minn=min(t[i].v,minn);
    	}
    	sort(t+1,t+n+1,cmp);
    	for(int i=1;i<=n;++i){
    		if(t[i].v!=t[i-1].v){
    			++e;
    		}
    		a[e]=t[i].p;
    		ma[e]=t[i].v;
    	}
    	for(int i=1;i<=n;++i){
    		if(!vis[a[i]]){
    			t1=t2=0;
    			minx=INF;
    			dfs(a[i]);
    			t1-=(minx+minx);
    			t2+=(minx+minn);
    			ans+=min(t1,t2);
    		}
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
  • 相关阅读:
    java第四次作业
    JAVA第三次作业
    Java第二次作业
    Java第一次作业
    android studio下载
    Android面试常问到的知识点
    [Java基础]List,Map集合总结
    搞ACM的你伤不起[转自RoBa]------(看一次,笑一次)
    06.5.1.Functions
    05.virsh命令的常用操作(kvm)
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6671394.html
Copyright © 2011-2022 走看看