Cod sursa(job #1781491)

Utilizator CrystyAngelDinu Cristian CrystyAngel Data 16 octombrie 2016 22:07:53
Problema Ciclu hamiltonian de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
long long n,ans,i,d,vf[200001],c[200001],j,mx,m,nr,k,x,y;
bool ok=1,viz[200001];
vector<int>v[200001],q;
inline void DFS(int nod)
{
    viz[nod]=1;
    vf[c[nod]]++;
    nr++;
    if(vf[c[nod]]==1)
        {
            q.push_back(c[nod]);
        }
    mx=max(mx,vf[c[nod]]);
    for(int k=0;k<v[nod].size();k++)
        if(!viz[v[nod][k]])
    {
        DFS(v[nod][k]);
    }
}
int main()
{
    //freopen("date","r",stdin);
    cin>>n>>m>>k;
    for(i=1;i<=n;i++)
        cin>>c[i];
    for(i=1;i<=m;i++)
    {
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    for(i=1;i<=n;i++)
    if(!viz[i])
    {
        nr=0;
        mx=0;
        DFS(i);
        ans+=(nr-mx);
        while(q.size())
        {
            int r=q.back();
            vf[r]=0;
            q.pop_back();
        }
    }
    cout<<ans;
}