2263 2023. 01. 06 14:06:49 kohumark Tom és Jerry 3 cpp11 Futási hiba 0/50 4ms 4724 KiB
#include <bits/stdc++.h>
using namespace std;

void fjerry(int x, int d, bool visited[], set<int> hist, int pii, vector<vector<int>>& jerry, int n, set<int>& ctom)
{
    visited[x] = true;
    hist.insert(x);
    pii++;
    if (x == d) {
        for (int i = 0; i < n; i++){
			if(!hist.count(i)) ctom.erase(i);
	    }
	}
    else {
        for(int i = 0; i < (int)jerry[x].size(); i++)
            if (!visited[jerry[x][i]])
                fjerry(jerry[x][i], d, visited, hist, pii, jerry,n,ctom);
    }
    pii--;
    visited[x] = false;
	hist.erase(x);
}

void route(int x, int d, bool visited[], int pii, vector<vector<int>>& map, int& l)
{
    visited[x] = true;
    pii++;
    if (x == d && pii < l) l=pii; 
    else {
        for(int i = 0; i < (int)map[x].size(); i++)
            if (!visited[map[x][i]])
                route(map[x][i], d, visited, pii, map, l);
    }
    pii--;
    visited[x] = false;
}

int main(){
	cin.tie(NULL); ios::sync_with_stdio(NULL);
	int n, m, t, db, e;
	cin >> n >> m >> t >> db >> e; e--; t--;
	vector<vector<int>> tom; vector<vector<int>> jerry;
	tom.assign(n, vector<int>());
	jerry.assign(n, vector<int>());
	for(int i=0; i<m; i++){
		int a, b, c;
		cin >> a >> b >> c;
		a--; b--;
		jerry[a].push_back(b);
		jerry[b].push_back(a);
		if(c==2&&b!=e&&a!=e){tom[a].push_back(b);tom[b].push_back(a);}
	}
	
	for(int i=0; i<db; i++){
		int x; cin >> x; x--;
		int pii=0;
		
		bool* visited = new bool[n];
		set<int> ctom;
		set<int> hist;
		for (int i = 0; i < n; i++){visited[i] = false; ctom.insert(i);}
		fjerry(x,e,visited,hist,pii,jerry,n,ctom);
		
		bool can=false;
		int lena=100000000; int lenb=100000000;
		for(auto it=ctom.begin(); it!=ctom.end(); it++){
			int d = *it + 1;
			pii=0;
			for(int i = 0; i < n; i++){visited[i] = false;}
			route(x,*it,visited,pii,jerry,lena);
			pii=0;
			for(int i = 0; i < n; i++){visited[i] = false;}
			route(t,*it,visited,pii,tom,lenb);
			if(lenb<=lena){cout << d << '\n'; can=true; break;}
		}
		
		if(!can) cout << '0' << '\n';
	}
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 0/50
1 Futási hiba 0/0 3ms 1928 KiB
2 Futási hiba 0/0 4ms 2568 KiB
3 Hibás válasz 0/5 2ms 2224 KiB
4 Futási hiba 0/1 2ms 2400 KiB
5 Futási hiba 0/1 2ms 2680 KiB
6 Futási hiba 0/1 4ms 3072 KiB
7 Futási hiba 0/1 2ms 2752 KiB
8 Futási hiba 0/1 2ms 2756 KiB
9 Futási hiba 0/1 2ms 2748 KiB
10 Futási hiba 0/1 4ms 3328 KiB
11 Futási hiba 0/2 4ms 3376 KiB
12 Futási hiba 0/2 2ms 3180 KiB
13 Futási hiba 0/1 2ms 3148 KiB
14 Futási hiba 0/2 2ms 3516 KiB
15 Futási hiba 0/2 2ms 3464 KiB
16 Futási hiba 0/2 2ms 3696 KiB
17 Futási hiba 0/2 2ms 3772 KiB
18 Futási hiba 0/2 2ms 3872 KiB
19 Futási hiba 0/2 2ms 4000 KiB
20 Futási hiba 0/2 2ms 4120 KiB
21 Futási hiba 0/2 2ms 4204 KiB
22 Futási hiba 0/2 2ms 4440 KiB
23 Futási hiba 0/3 2ms 4148 KiB
24 Futási hiba 0/2 2ms 4416 KiB
25 Futási hiba 0/3 2ms 4572 KiB
26 Futási hiba 0/2 2ms 4500 KiB
27 Futási hiba 0/2 2ms 4596 KiB
28 Futási hiba 0/3 3ms 4724 KiB