Pagini recente » Borderou de evaluare (job #2016084) | Borderou de evaluare (job #596575) | Borderou de evaluare (job #1566009) | Cod sursa (job #2631603) | Cod sursa (job #2120575)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ubuntzei.in") ;
ofstream fout("ubuntzei.out") ;
int n , m , k ;
vector<pair<int,int> > graf[2001] ;
int dp[2001][16] ;
int t[16] ;
bool ubun[16] ;
bool viz[16] ;
void citire()
{
int i , x , c , y ;
fin >> n >> m ;
fin >> k ;
for ( i = 1 ; i <= k ; i++ )
{
fin >> t[i] ;
ubun[t[i]] = true ;
}
for ( i = 1 ; i <= m ; i++ )
{
fin >> x >> y >> c ;
graf[x].push_back(make_pair(y,c)) ;
graf[y].push_back(make_pair(x,c)) ;
}
}
void solve()
{
int nod , p , i , j ;
queue<int> Q ;
Q.push(1) ;
for ( i = 1 ; i <= n ; i++ )
for ( j = 0 ; j <= k ; j++ )
dp[i][j] = 0x3f3f3f3f ;
dp[1][0] = 0 ;
p = 0 ;
while(!Q.empty())
{
nod = Q.front() ;
Q.pop() ;
for ( i = 0 ; i < graf[nod].size() ; i++ )
{
if ( ubun[graf[nod][i].first] == true && viz[graf[nod][i].first] == false )
{
if ( dp[graf[nod][i].first][p+1] > dp[nod][p] + graf[nod][i].second )
{
dp[graf[nod][i].first][p+1] = dp[nod][p] + graf[nod][i].second ;
p++ ;
viz[graf[nod][i].first] = true;
Q.push(graf[nod][i].first) ;
}
}
else
{
if ( dp[graf[nod][i].first][p] > dp[nod][p] + graf[nod][i].second )
{
dp[graf[nod][i].first][p] = dp[nod][p] + graf[nod][i].second ;
Q.push(graf[nod][i].first) ;
}
}
}
}
fout << dp[n][k] ;
}
int main()
{
citire() ;
solve() ;
}