为什么数组开小了还对了(10)
  • 板块P1396 营救
  • 楼主墨石
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/5/16 17:29
  • 上次更新2023/11/4 23:10:33
查看原帖
为什么数组开小了还对了(10)
393601
墨石楼主2021/5/16 17:29
#include<bits/stdc++.h>
using namespace std;
struct node{
	int cst,vex;
	bool operator < (const node & tmp) const{
		return cst > tmp.cst;
	}
};
const int MAXN = 10005,MAXM = 20005,INF = 0x3f3f3f3f;
int h[MAXN],e[MAXM],w[MAXM],ne[MAXM],idx;
int n,m,st,ed,dst[MAXN];	//dst[i]表示从起点到达i结点路径的最大值 
bool vst[MAXN];
priority_queue<node> que;


void add(int x,int y,int z){
	ne[idx] = h[x];e[idx] = y;w[idx] = z;h[x] = idx++;
}

void init(){
	//初始化 
	idx = 0;
	memset(h,-1,sizeof(h));
	//输入
	cin>>n>>m>>st>>ed;
	for(int i=1;i<=m;i++){
		int x,y,z;cin>>x>>y>>z;
		add(x,y,z);add(y,x,z);
	}
	cout<<idx<<endl;
	return;
}

void dijkstra(node u){
	//初始化
	for(int i=1;i<=n;i++)	dst[i] = INF;
	dst[u.vex] = 0;
	que.push(u);
	//松弛,或选中间点
	while(!que.empty()){
		//找最小 
		node cur = que.top();que.pop();
		if(vst[cur.vex])	continue;
		vst[cur.vex]=true;
		//借东风
		for(int i=h[cur.vex];i!=-1;i=ne[i]){
			int to = e[i];
			if(dst[to] < max(dst[cur.vex],w[i]))	continue;
			dst[to] = max(dst[cur.vex],w[i]);
			que.push((node){dst[to],to});			
		} 
	}	
} 


int main(){
	freopen("P1396_10.in","r",stdin);
	init();
	node u;u.cst = 0,u.vex = st;
	dijkstra(u);
	cout<<dst[ed];	
	return 0;
}

当idx到20005的时候就自己变成了0

2021/5/16 17:29
加载中...