Submission #802596

#TimeUsernameProblemLanguageResultExecution timeMemory
802596parsadox2Viruses (BOI20_viruses)C++14
11 / 100
1 ms360 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxn = 1e2 + 10;
int n , g , m , w[maxn] , val[maxn] , st[maxn] , dis[maxn];
vector <int> ar[maxn];
vector <pair<int ,int>> adj[maxn];
bool marked[maxn];

void dij()
{
	priority_queue <pair<int ,int>> pq;
	memset(dis , 63 , sizeof dis);
	dis[0] = dis[1] = 1;
	pq.push({1 , 0});
	pq.push({1 , 1});
	while(!pq.empty())
	{
		auto now = pq.top();  pq.pop();
		int D = abs(now.first) , v = now.second;
		if(marked[v])
			continue;
		//cout << v << " " << D << endl;
		marked[v] = true;
		for(auto e : adj[v])
		{
			int u = e.first , ind = e.second;
			val[ind] += D;
			w[ind]--;
			//cout << ind << " " << w[ind] << endl;
			if(w[ind] == 0 && val[ind] < dis[u])
			{
				dis[u] = val[ind];
				pq.push({-dis[u] , u});
			}
		}
	}
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> g >> n >> m;
	for(int i = 0 ; i < n ; i++)
	{
		int x;  cin >> st[i] >> x;
		w[i] = x;
		for(int j = 0 ; j < x ; j++)
		{
			int y;  cin >> y;
			ar[i].push_back(y);
			adj[y].push_back({st[i] , i});
		}
	}
	dij();
	for(int i = 0 ; i < m ; i++)
	{
		int x;  cin >> x;
		while(x--)
		{
			int y;  cin >>y;
		}
	}
	for(int i = 2 ; i < g ; i++)
	{
		if(!marked[i])
			cout << "YES" << endl;
		else
			cout << "NO " << dis[i] << endl;
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...