#include <bits/stdc++.h>
#define boost ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long
using namespace std;
const int inf=1e17;
const int N=3e5+5;
const int N1=1e5+5;
const int N2=5e6+6;
const int mod=1e9+7;
const int k1=447;
struct edge{
int d,in;
};
struct edge1{
int l,r;
};
vector<int>v;
vector<int>v1[N];
vector<int>v2;
int dp[5][5];
int cnt[5];
int ans=0;
vector<pair<int,int> >v3;
signed main(){
boost;
int n,m,k;
cin>>n>>m>>k;
v.push_back(0);
for(int i=1;i<=n;i++){
int x;
cin>>x;
v.push_back(x);
}
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
v3.push_back({x,y});
v1[x].push_back(y);
v1[y].push_back(x);
if(k>=2&&v[x]!=v[y]){
ans+=2;
}
dp[v[x]][v[y]]++;
dp[v[y]][v[x]]++;
}
if(k>=3){
for(int i=1;i<=n;i++){
for(int j=0;j<v1[i].size();j++){
cnt[v[v1[i][j]]]++;
}
int cnt1=v1[i].size();
if(cnt1==1){
cnt[1]=0;
cnt[2]=0;
cnt[3]=0;
cnt[4]=0;
continue;
}
for(int j=0;j<v1[i].size();j++){
int x=v1[i][j];
if(v[x]!=v[i]){
ans+=(cnt1-cnt[v[x]]-cnt[v[i]])*2;
}
cnt1--;
cnt[v[x]]--;
}
cnt[1]=0;
cnt[2]=0;
cnt[3]=0;
cnt[4]=0;
}
}
if(k>=4){
for(int i=0;i<v3.size();i++){
int x=v3[i].first;
int y=v3[i].second;
if(v[x]==v[y]){
continue;
}
for(int j=0;j<v1[x].size();j++){
if(v1[x][j]==y){
continue;
}
cnt[v[v1[x][j]]]++;
}
int cnt1=v1[x].size()-1;
for(int j=0;j<v1[y].size();j++){
if(v1[y][j]==x){
continue;
}
int z=v1[y][j];
if(v[z]!=v[x]&&v[z]!=v[y]){
ans+=(cnt1-cnt[v[x]]-cnt[v[y]]-cnt[v[z]])*2;
}
}
cnt[1]=0;
cnt[2]=0;
cnt[3]=0;
cnt[4]=0;
}
}
cout<<ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |