Pagini recente » Cod sursa (job #3225791) | Cod sursa (job #2308589) | Cod sursa (job #2129353) | Cod sursa (job #2285803) | Cod sursa (job #2486330)
#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;
}