Cod sursa(job #2486330)

Utilizator AndreeaGherghescuAndreea Gherghescu AndreeaGherghescu Data 2 noiembrie 2019 18:15:44
Problema Tribut Scor 0
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream in ("tribut.in");
ofstream out ("tribut.out");

int viz[102],tribut[102],mat[102][102],a[102],tributu[102],n;

void dfs (int nod,int &sum)
{
    viz[nod]=1;
    sum+=tribut[nod];
    tribut[nod]=0;
    for (int i=1;i<=n;i++)
    {
        if (mat[nod][i]==1)
            if (viz[i]==0)
                dfs (i,sum);
    }
}
int main()
{
    int m,t,p,s,x;
    in>>t;
    for (int i=1;i<=t;i++)
    {
        int maximp=0;
        for (int j=1;j<=n;j++)
            for (int g=1;g<=n;g++)
                mat[j][g]=0;

        in>>n>>m;
        for (int j=1;j<=n;j++)
            in>>tribut[j];
        for (int j=1;j<=m;j++)
        {
            in>>p>>tributu[j];
            if (tributu[j])
            {
                maximp+=tributu[j];
                for (int g=1;g<=p;g++)
                    in>>a[g];
                for (int g=1;g<=p;g++)
                    for (int h=1;h<=p;h++)
                        if (g!=h)
                            mat[a[g]][a[h]]=1;
            }
            else
                for (int g=1;g<=p;g++)
                    in>>x;
        }
        int maxx=0;
        for (int i=1;i<=n;i++) viz[i]=0;
        for (int j=1;j<=n;j++)
        {
            int sum=0;
            if (viz[i]==0)
                dfs (i,sum);
            //cout<<sum<<' ';
            maxx+=sum;
        }
        if (maxx<=maximp) out<<maxx<<'\n';
        else out<<maximp<<'\n';
    }
    return 0;
}