• [BZOJ3714][PA2014]Kuglarz


    bzoj

    sol

    显然你要知道每个位置下球的情况就要知道每个(sum_i-sum_{i-1})吧。

    其实一个询问(i,j)就是告诉你(sum_j-sum_{i-1})的奇偶性,那么此时(sum_j)(sum_{i-1})这两个变量就相互关联了吧。

    那么实际上就是要你使用最小的代价,把(sum_1...sum_n)(n)个变量全都联系在一起。

    模型转化为最小生成树。
    (Prim)即可。

    code

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define ll long long
    int gi()
    {
    	int x=0,w=1;char ch=getchar();
    	while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
    	if (ch=='-') w=0,ch=getchar();
    	while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    	return w?x:-x;
    }
    const int N = 2e3+5;
    int n,c[N][N],dis[N],vis[N];
    ll ans;
    int main()
    {
    	n=gi()+1;
    	for (int i=1;i<n;++i)
    		for (int j=i+1;j<=n;++j)
    			c[i][j]=c[j][i]=gi();
    	memset(dis,63,sizeof(dis));dis[1]=0;
    	for (int t=1;t<=n;++t)
    	{
    		int p=0;
    		for (int i=1;i<=n;++i) if (!vis[i]) p=dis[i]<dis[p]?i:p;
    		vis[p]=1;ans+=dis[p];
    		for (int i=1;i<=n;++i) if (!vis[i]) dis[i]=min(dis[i],c[p][i]);
    	}
    	printf("%lld
    ",ans);return 0;
    }
    
  • 相关阅读:
    iOS崩溃报告获取一
    GCDTimer
    Runtime
    Socket
    冒泡排序笔记
    学习java虚拟机笔记
    ftp发送文件包括中文名
    java email
    批量数据插入高效 转发
    读取本地硬盘文件,快速扫描插入 数据库
  • 原文地址:https://www.cnblogs.com/zhoushuyu/p/8663523.html
Copyright © 2020-2023  润新知