Cod sursă (job #369266)

Utilizator avatar intrepidAmateur IonBordea intrepidAmateur IP ascuns
Problemă Dragoni2 (clasele 11-12) Compilator cpp | 0.95 kb
Rundă lasm_22_03_b Status evaluat
Dată 22 mar. 2018 18:32:55 Scor 20
#include<bits/stdc++.h>
using namespace std;

ifstream fin("dragoni2.in");
ofstream fout("dragoni2.out");

typedef struct nod{
	int nr,dist,viz;
	nod *next;
} nod;

nod *p[801],*r;
int e,n,m;
int a[801],x,y,l,i,dist_min,l_max;
bool viz[801];

void ADD(int i,int j,int l){
	r=new nod;
	r->nr=j;
	r->dist=l;
	r->next=p[i];
	p[i]=r;
}

void DFS1(int a,int l){
	viz[a]=1;
	for(nod *r=p[a];r;r=r->next){
		if(r->dist<=l && viz[r->nr]==0)DFS1(r->nr,l);
	}
}

int main(){
	fin >> e >> n >> m;
	
	for(i=1;i<=n;i++)p[i]=0;
	
	for(i=1;i<=n;i++)fin >> a[i];
	
	for(i=0;i<m;i++){
		fin >> x >> y >> l;
		ADD(x,y,l);
		ADD(y,x,l);
	}
	
	if(e==1){
		DFS1(1,a[1]);
		for(r=p[n];r;r=r->next){
			if(viz[r->nr]){
				if(dist_min==0)dist_min=r->dist;
				else dist_min=(dist_min<r->dist)?(dist_min):(r->dist);
			}
		}
		for(i=1;i<=n;i++)if(viz[i] && a[i]>=dist_min)l_max=(l_max>a[i])?(l_max):(a[i]);
		fout << l_max;
	}
	return 0;
}