暴力过了???
  • 板块P1186 玛丽卡
  • 楼主STUDENT00
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/12/11 14:07
  • 上次更新2023/10/24 07:59:47
查看原帖
暴力过了???
658786
STUDENT00楼主2022/12/11 14:07

加了个clock()的优化,然后过了?

#include<bits/stdc++.h>
#define N 1005
using namespace std;
int n,m,g[N][N],fa[N],dis[N];
vector<pair<int,int> > w[N];
bool vis[N]; 
void work(int p,bool flag){
	memset(dis,127,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dis[1]=0;
	for(int l=1;l<=n;l++){
		int mins=1e9,k=-1;
		for(int i=1;i<=n;i++){
			if(!vis[i]&&dis[i]<mins){mins=dis[i];k=i;}
		}
		vis[k]=1;
		for(int i=0;i<w[k].size();i++){
			int t=w[k][i].first;
			if(g[k][t]==p) continue;
			int s=dis[k]+w[k][i].second;
			if(s<dis[t]){
				dis[t]=s;
				if(flag) fa[t]=k;
			}
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		w[x].push_back(make_pair(y,z));
		w[y].push_back(make_pair(x,z));
		g[x][y]=g[y][x]=i;
	}
	work(0,1);
	int ans=0,now=n;
	while(now!=1){
		work(g[now][fa[now]],0);
		ans=max(ans,dis[n]);
		now=fa[now];
		if(clock()*1.0/CLOCKS_PER_SEC>0.95) break;
	}
	printf("%d",ans);
	return 0;
}
2022/12/11 14:07
加载中...