Pagini recente » Cod sursa (job #1453712) | Cod sursa (job #2157973) | Cod sursa (job #1902137) | Cod sursa (job #2308260) | Cod sursa (job #2120579)
#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] ;
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 )
{
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++ ;
Q.push(graf[nod][i].first) ;
}
}
else if ( ubun[graf[nod][i].first] == false )
{
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() ;
}