首页 > 其他分享 >P3959

P3959

时间:2024-10-23 20:20:51浏览次数:1  
标签:std ch namespace qr char P3959

#include<bits/stdc++.h>
using namespace std;
namespace IO {
	char buf[50];
}
inline void qr(int &x){char ch=getchar(),lst=' ';while(ch>'9'||ch<'0')lst=ch,ch=getchar();while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();if (lst=='-')x=-x;}
inline void write(int x,const char aft,const bool pt){if(x<0){putchar('-');x=-x;}int top=0;do{IO::buf[++top]=x%10+'0';x/=10;} while(x);while(top)putchar(IO::buf[top--]);if(pt)putchar(aft);}
const int maxt=1<<15;
const int INF=0x3f3f3f3f;
int n,m,a,b,c,ans=INF;
int f[maxt][15],g[maxt],dis[15][15];
int main(){
	qr(n);qr(m);
	memset(dis,0x3f,sizeof dis);
	for(register int i=1;i<=m;++i){
		a=b=c=0;qr(a);qr(b);qr(c);--a;--b;
		dis[b][a]=dis[a][b]=min(dis[a][b],c);
	}
	memset(f,0x3f,sizeof f);
	int all=(1<<n)-1;
	for(register int i=1;i<=all;++i){
		for(register int j=0;j<n;++j)if(((1<<j)|i)==i){
			dis[j][j]=0;
			for(register int k=0;k<n;++k)if(dis[j][k]!=INF){
				g[i]|=(1<<k);
			}
		}
	}
	for(register int i=0;i<n;++i)f[1<<i][0]=0;
	for(register int i=2;i<=all;++i){
		for(register int s0=i-1;s0;s0=(s0-1)&i)if((g[s0]|i)==g[s0]){
			int sum=0;
			int ss=s0^i;
			for(register int k=0;k<n;++k)if((1<<k)&ss){
				int temp=INF;
				for(register int h=0;h<n;++h)if((1<<h)&s0){
					temp=min(temp,dis[h][k]);
				}
				sum+=temp;
			}
			for(register int j=1;j<n;++j)if(f[s0][j-1]!=INF){
				f[i][j]=min(f[i][j],f[s0][j-1]+sum*j);
			}
		}
	}
	for(register int i=0;i<n;++i)ans=min(ans,f[all][i]);
	write(ans,'\n',true);
	return 0;
}

标签:std,ch,namespace,qr,char,P3959
From: https://www.cnblogs.com/zan-mei-tai-yang/p/18498291

相关文章

  • P3959 [NOIP2017 提高组] 宝藏 题解
    P3959[NOIP2017提高组]宝藏题解搜索魅力时刻怎么说,四种做法比较??的模拟退火跑得快但是正确性有问题的状压DP跑得慢但是一定正确的状压DP时间复杂度很玄学的DFS+剪枝我就选择了搜索的做法先打个暴搜,70pts点击查看暴搜代码#include<bits/stdc++.h>usingna......
  • P3959 [NOIP2017 提高组] 宝藏
    思路:考虑状态压缩动态规划。定义\(dp_{i,j,S}\)表示点\(j\)离起点\(i\)的距离,且从点\(j\)开始打通的点集为\(S\)的最小代价(注意\(S\)不能包含\(j\))。考虑枚举\(S\)一个一个子集\(S'\),同时枚举一个\(k\),需要满足\(k\inS'\),即我们可以先打通\(j\tok\),然后......
  • Luogu P3959 宝藏 题解 [ 紫 ] [ 状压 dp ] [ 二项式定理 ]
    宝藏:一个对着蓝书代码调都能调两个小时的大毒瘤,但是思路还是很值得借鉴的,有普通状压和三进制状压两种做法,或者暴搜剪枝也可以(这里不介绍暴搜剪枝做法)。普通状压做法观察到\(n\le12\),首先想到状压。但考虑到普通的状压不太行,因为\(K\)这个数算在代价里,会导致这个dp有后效......
  • [洛谷P3959][NOIP2017提高组] 宝藏
    [NOIP2017提高组]宝藏题目描述参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了\(n\)个深埋在地下的宝藏屋,也给出了这\(n\)个宝藏屋之间可供开发的\(m\)条道......
  • P3959 [NOIP2017 提高组] 宝藏 题解
    一道不错的状压dp题。注意到本质上打通的路径会构成一棵树,因此实际上总花费就是一个点的层高(根节点层高为0)乘上其到父亲节点的边的边权。据此可以考虑一种初步的状压......