zoukankan      html  css  js  c++  java
  • BZOJ 3714 PA2014 Kuglarz

    3714: [PA2014]Kuglarz

    Time Limit: 20 Sec  Memory Limit: 128 MB
    Submit: 976  Solved: 543
    [Submit][Status][Discuss]

    Description

    魔术师的桌子上有n个杯子排成一行,编号为1,2,…,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品。花费c_ij元,魔术师就会告诉你杯子i,i+1,…,j底下藏有球的总数的奇偶性。
    采取最优的询问策略,你至少需要花费多少元,才能保证猜出哪些杯子底下藏着球?

    Input

    第一行一个整数n(1<=n<=2000)。
    第i+1行(1<=i<=n)有n+1-i个整数,表示每一种询问所需的花费。其中c_ij(对区间[i,j]进行询问的费用,1<=i<=j<=n,1<=c_ij<=10^9)为第i+1行第j+1-i个数。

    Output

    输出一个整数,表示最少花费。

    Sample Input

    5
    1 2 3 4 5
    4 3 2 1
    3 4 5
    2 1
    5

    Sample Output

    7

    HINT

     

    Source

    鸣谢Jcvb

    做最小生成树

    很显然prim比kruskal快

    kruskal

    #include <bits/stdc++.h>
    #define ll long long
    #define inf 100000001
    using namespace std;
    inline int read(){
    	int x=0;int f=1;char ch=getchar();
    	while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    	while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    	return x*f;
    }
    const int MAXN=5e6+10;
    struct node{
    	int y,x,v;
    }e[MAXN];
    int len=0,n,f[MAXN];
    inline int find(int x){
    	return x==f[x]?x:f[x]=find(f[x]);
    }
    inline bool mycmp(node n,node m){
    	return n.v<m.v;
    }
    int main(){
    	n=read();
    	for(int i=1;i<=n;i++){
    		for(int j=i;j<=n;j++){
    			e[++len].x=i-1;e[len].y=j;e[len].v=read();
    		}
    	}
    	for(int i=0;i<=n;i++){
    		f[i]=i;
    	}
    	int cnt=0;ll ans=0;
    	sort(e+1,e+len+1,mycmp);
    	for(int i=1;i<=len;i++){
    		int fx=find(e[i].x);int fy=find(e[i].y);
    		if(fx!=fy){
    			cnt++;f[fx]=fy;ans+=e[i].v;
    		}
            if(cnt==n) break;
    	}
    	cout<<ans<<endl;
    }
    

    prim

    #include <bits/stdc++.h>
    #define inf 1000000010
    #define eps 1e-7
    #define ll long long
    using namespace std;
    inline int read(){
    	int x=0;int f=1;char ch=getchar();
    	while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    	while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    	return x*f;
    }
    const int MAXN=2100;
    int d[MAXN],vis[MAXN],a[MAXN][MAXN];
    int main(){
    	int n=read();
    	for(int i=1;i<=n;i++){
    		for(int j=i;j<=n;j++){
    			a[i-1][j]=a[j][i-1]=read();
    		}
    	}
    	memset(d,10,sizeof(d));
    	d[0]=0;vis[0]=1;ll ans=0;
    	for(int i=1;i<=n;i++){
    		if(a[0][i]) d[i]=a[0][i];
    	}
    	for(int i=1;i<=n;i++){
    		int minn=inf;int mn;
    		for(int j=1;j<=n;j++){
    			if(!vis[j]&&d[j]<minn){
    				minn=d[j];mn=j;
    			}
    		}
    		vis[mn]=1;ans+=minn;
    		for(int j=1;j<=n;j++){
    			if(!vis[j]) d[j]=min(d[j],a[mn][j]);
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    

      

  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/something-for-nothing/p/8146456.html
Copyright © 2011-2022 走看看