Advertisement
Guest User

vppp

a guest
Feb 24th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. #include <fstream>
  2. #define inf 1000000
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("parc.in");
  7. ofstream fout("parc.out");
  8. int n,m,viz[101],c,a[101][101],porti[101],p,d[101];
  9.  
  10. void citire()
  11. {
  12. fin>>n>>m>>c;
  13. for(int i=1;i<=n;i++)
  14. for(int j=1;j<i;j++)
  15. a[i][j]=a[j][i]=inf;
  16. int x,y,cost;
  17. for(int i=1;i<=m;i++)
  18. {
  19. fin>>x>>y>>cost;
  20. a[x][y]=a[y][x]=cost;
  21. }
  22. fin>>p;
  23. for(int i=1;i<=p;i++)
  24. fin>>porti[i];
  25. }
  26.  
  27. void init()
  28. {
  29. for(int i=1;i<=n;i++)
  30. d[i]=a[c][i];
  31. viz[c]=1;
  32. }
  33.  
  34. void dijkstra()
  35. {
  36. int minim,pozmin;
  37. for(int k=1;k<n;k++)
  38. {
  39. minim=inf,pozmin=0;
  40. for(int i=1;i<=n;i++)
  41. if(d[i]<minim&&!viz[i])
  42. {
  43. minim=d[i];
  44. pozmin=i;
  45. }
  46. if(pozmin!=0)
  47. {
  48. viz[pozmin]=1;
  49. for(int i=1;i<=n;i++)
  50. if(d[i]>d[pozmin]+a[i][pozmin]&&viz[i]==0)
  51. d[i]=a[i][pozmin]+d[pozmin];
  52. }
  53. }
  54. }
  55.  
  56. int main()
  57. {
  58. citire();
  59. init();
  60. dijkstra();
  61. int mn,pmn;
  62. mn=inf,pmn=0;
  63. for(int i=1;i<=p;i++)
  64. {
  65. if(d[porti[i]]<mn)
  66. {
  67. mn=d[porti[i]];
  68. pmn=porti[i];
  69. }
  70. }
  71. fout<<pmn;
  72. return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement