10892022-02-28 15:20:50batorfibalazsHálózati átvitelcpp14Hibás válasz 4/50592ms7456 KiB
#include <bits/stdc++.h>
using namespace std;


void kereso(int elozo);

int cs[10000];
int utak[100][10000][2]={}; //1. hova, 2. sebessege az utnak
int szamlalo[10000]={};
int sz, csomo, csat, h;
map <int, int> holtart;
int s[10000];
bool nullae[10000];

int main()
{
    ios_base::sync_with_stdio(false);
    cin >> sz >> csat >> csomo >> h;
    int s1,s2,s3;
    for (int i=0;i<csat;i++)
    {
        cin >> s1 >> s2 >> s3;
        s1--;
        s2--;
        utak[szamlalo[s1]][s1][0]=s2;
        utak[szamlalo[s2]][s2][0]=s1;
        utak[szamlalo[s1]][s1][1]=s3;
        utak[szamlalo[s2]][s2][1]=s3;
        szamlalo[s1]++;
        szamlalo[s2]++;
    }
    ///////////////////
    /*for (int i=0;i<sz;i++)
    {
        for (int j=0;j<szamlalo[i];j++)
        {
            cout << utak[j][i][0] << " " << utak[j][i][1] << "  ";
        }
        cout << szamlalo[i] << endl;
    }*/
    ///////////////////
    int hany=0;
    s1=1;
    s[0]=csomo-1;
    do
    {
        holtart.clear();
        hany++;
        for (int i=0;i<s1;i++)
        {
            kereso(s[i]);
        }
        s1=0;
        for (auto t:holtart)
        {
            s[s1]=t.first;
            s1++;
        }

    } while (holtart.size()!=0 and hany<h);
    cs[csomo-1]=0;
    nullae[csomo-1]=true;
    //kiiras
    for (int i=0;i<sz;i++)
    {
        if (cs[i]==0 and !nullae[i]) cout << -1 << endl;
        else cout << cs[i] << endl;
    }
    return 0;
}

void kereso(int elozo)
{

    for (int i=0;i<szamlalo[elozo];i++)
    {
        holtart[utak[i][elozo][0]]++;

        if (cs[elozo]<utak[i][elozo][1] and elozo!=csomo-1)
        {
            if (cs[utak[i][elozo][0]]<=cs[elozo])
            {
                cs[utak[i][elozo][0]]=cs[elozo];
                if (cs[elozo]==0)
                {
                    nullae[utak[i][elozo][0]]=true;
                }
            }
        }
        else
        {
            if (cs[utak[i][elozo][0]]<=utak[i][elozo][1])
            {
                cs[utak[i][elozo][0]]=utak[i][elozo][1];
                if (utak[i][elozo][1]==0)
                {
                    nullae[utak[i][elozo][0]]=true;
                }
            }
        }
    }
}





/*
5 6 1 2
1 2 2
1 5 4
1 3 2
1 4 3
5 4 1
5 3 4

5 1 1 1
1 2 3
*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
base4/50
1Elfogadva0/02ms1988 KiB
2Hibás válasz0/02ms2140 KiB
3Elfogadva1/11ms2000 KiB
4Hibás válasz0/11ms2012 KiB
5Hibás válasz0/22ms2040 KiB
6Hibás válasz0/22ms2204 KiB
7Hibás válasz0/22ms2276 KiB
8Hibás válasz0/22ms2284 KiB
9Hibás válasz0/14ms2280 KiB
10Hibás válasz0/110ms2340 KiB
11Elfogadva1/123ms2572 KiB
12Hibás válasz0/119ms2820 KiB
13Hibás válasz0/221ms2676 KiB
14Hibás válasz0/225ms2904 KiB
15Hibás válasz0/279ms3404 KiB
16Hibás válasz0/245ms3504 KiB
17Hibás válasz0/259ms3524 KiB
18Hibás válasz0/2105ms3784 KiB
19Hibás válasz0/289ms3804 KiB
20Hibás válasz0/259ms4008 KiB
21Elfogadva1/1238ms5176 KiB
22Hibás válasz0/1358ms5740 KiB
23Elfogadva1/1479ms6212 KiB
24Időlimit túllépés0/1570ms4384 KiB
25Időlimit túllépés0/2582ms4628 KiB
26Időlimit túllépés0/2555ms4904 KiB
27Időlimit túllépés0/2592ms5116 KiB
28Futási hiba0/24ms6236 KiB
29Futási hiba0/24ms6512 KiB
30Futási hiba0/26ms6788 KiB
31Futási hiba0/24ms7040 KiB
32Futási hiba0/24ms7456 KiB