社区讨论

逆天代码求调40

P5764[CQOI2005] 新年好参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo1pwmck
此快照首次捕获于
2023/10/23 01:03
2 年前
此快照最后确认于
2023/11/03 01:43
2 年前
查看原帖
40分代码
CPP
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef pair<int,int> PII;
const int N=5e4+10,INF=0x3f3f3f3f;
int h[N],e[N*2],w[N*2],ne[N*2],idx;
int dist[6][N];
int source[6];
bool st[N];
int n,m;
int res=INF;
void add(int a,int b,int c){
	e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
//void spfa(int u,int dist[]){
//	memset(dist,0x3f,N*4);
//	queue<int> q;
//	q.push(u);
//	dist[u]=0;
//	while(q.size()){
//		int t=q.front();
//		q.pop();
//		st[t]=false;
//		for(int i=h[u];i!=-1;i=ne[i]){
//			int j=e[i];
//			if(dist[j]>dist[t]+w[i]){
//				dist[j]=dist[t]+w[i];
//				if(!st[j]){
//					q.push(j);
//					st[j]=true;
//				} 
//			}
//		} 
//	}
//}
void dijkstra(int u,int dist[]){
	memset(dist,0x3f,N*4);
	memset(st,false,sizeof st);
	priority_queue<PII,vector<PII>,greater<PII>> heap;
	dist[u]=0;
	heap.push({0,u});
	while(heap.size()){
		auto t=heap.top();
		heap.pop();
		int ver=t.y,distance=t.x;
		if(st[ver]) continue;
		st[ver]=true;
		for(int i=h[ver];i!=-1;i=ne[i]){
			int j=e[i];
			if(dist[j]>distance+w[i]){
				dist[j]=distance+w[i];
				heap.push({dist[j],j});
			}
		} 
	}
} 
void dfs(int u,int s,int distance){
    if(distance>=res) return;
	if(u==6){
	    res=min(res,distance);
	    return;
	}
	for(int i=1;i<=5;i++){
		if(!st[i]){
			int next=source[i];
			st[i]=true;
			dfs(u+1,i,distance+dist[s][next]);
			st[i]=false;
		}
	}
} 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
// 	cin>>n>>m;
	scanf("%d%d",&n,&m);
	source[0]=1;
	for(int i=1;i<=5;i++) scanf("%d",&source[i]);//cin>>source[i];
	memset(h,-1,sizeof h);
	for(int i=0;i<m;i++){
		int a,b,c;
// 		cin>>a>>b>>c;
        scanf("%d%d%d",&a,&b,&c);
		add(a,b,c),add(b,a,c);
	}
	for(int i=0;i<=5;i++) dijkstra(source[i],dist[i]);
	memset(st,false,sizeof st);
	dfs(1,0,0);
// 	cout<<res<<endl;
    printf("%d\n",res);
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...