poj 3270 Cow Sorting

来源:互联网 发布:同一格式表格数据汇总 编辑:程序博客网 时间:2024/05/21 09:45

这题和lrj黑书P247的那个例题一摸一样啊,听说还是2002年的WF的一道题,解题思路什么的就不写了,自己去黑书上看吧。

#include<iostream>#include<algorithm>#include<string.h>#include<stack>#include<queue>#include<math.h>#include<cstdio>#define mm(a,b) memset(a,b,sizeof(a))#define maxn 100010using namespace std;const int inf=0x7ffffff;struct node{int min_t;int cnt;}p[maxn];int num[maxn];int t[maxn];bool vis[maxn];int e,n;void dfs(int u){    for(int i=1;i<=n;i++)if(t[i]==u && !vis[i]){vis[i]=1;p[e].cnt++;p[e].min_t=min(p[e].min_t,t[i]);dfs(num[i]);}return ;}int main(){int minn,sum,ans;while(~scanf("%d",&n)){minn=inf;sum=0;for(int i=1;i<=n;i++){scanf("%d",&num[i]);sum+=num[i];t[i]=num[i];minn=min(minn,num[i]);}sort(num+1,num+n+1);e=1;mm(vis,0);for(int i=1;i<=n;i++)if(!vis[i]){vis[i]=1;p[e].cnt=1;p[e].min_t=t[i];dfs(num[i]);e++;}ans=sum;bool flag=0;for(int i=1;i<e;i++)ans+=min((p[i].cnt-2)*p[i].min_t,p[i].min_t+(p[i].cnt+1)*minn);printf("%d\n",ans);}return 0;}


原创粉丝点击