题意简述:有n个点,每一个点都有一个权值,然后有m个条件,每一个条件是a[x]!=a[y],让选择最少的点且至少选择1个,然后让这个点的权值+1,使得条件仍满足

所有数对k取模

题解:如果a[x]+1=a[y]那么x向y连边,a[y]+1=a[x]那么y向x连边,此时答案等于缩点之后出度为0的分量中点最少的一个

#include<bits/stdc++.h>
#define forn(i, n) for (int i = 0 ; i < int(n) ; i++)
#define fore(i, s, t) for (int i = s ; i < (int)t ; i++)
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define pf2(x,y) printf("%d %d\n",x,y)
#define pf(x) printf("%d\n",x)
#define each(x) for(auto it:x) cout<<it<<endl;
#define pi pair<int,int>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
const int maxm=2e5+5;
const int inf=1e9;
int head[maxn],ver[maxm],nex[maxm],tot;
void inline AddEdge(int x,int y){
ver[++tot]=y,nex[tot]=head[x],head[x]=tot;
}
int dfn[maxn],low[maxn],num,sccnum,scc[maxn],s[maxn],d[maxn],cnt[maxn],top;
void Tarjan(int x){
low[x]=dfn[x]=++num;
s[++top]=x;
for(int i=head[x];i;i=nex[i]){
int y=ver[i];
if(!dfn[y]) {
Tarjan(y);
low[x]=min(low[x],low[y]);
}
else if(!scc[y]) low[x]=min(low[x],dfn[y]);
}
if(low[x]==dfn[x]){
sccnum++;
while(s[top]!=x){
scc[s[top]]=sccnum;
top--;
cnt[sccnum]++;
}
cnt[sccnum]++;
scc[s[top]]=sccnum;
top--;
}
}
int n,m,k,a[maxn];
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=0;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
if((a[x]+1)%k==a[y]) AddEdge(x,y);
if((a[y]+1)%k==a[x]) AddEdge(y,x);
}
for(int i=1;i<=n;i++)
if(!dfn[i]) Tarjan(i);
for(int x=1;x<=n;x++)
for(int i=head[x];i;i=nex[i]){
int y=ver[i];
if(scc[x]!=scc[y]) {
d[scc[x]]++;
}
}
int idx=0;
cnt[idx]=1e9;
for(int i=1;i<=n;i++){
if(d[scc[i]]==0 && cnt[scc[i]]<cnt[scc[idx]])
idx=i;
}
cout<<cnt[scc[idx]]<<endl;
for(int i=1;i<=n;i++)
if(scc[idx]==scc[i]) cout<<i<<' ';
cout<<endl;
return 0;
}

  

最新文章

  1. javascript:window.history.go(-1)
  2. 【C语言】C语言函数
  3. Unity使用反射探头实现地面的镜面反射
  4. js中按钮控制显示隐藏以及下拉功能
  5. Swift数据类型
  6. ruby2.2.2在msvc2010上编译
  7. 解决SQL Server的TEXT、IMAGE类型字段的长度限制
  8. pygame系列_mouse鼠标事件
  9. Java泛型和集合之泛型介绍
  10. jmeter参数化随机取值实现
  11. Arch Linux之pacman调用axel多线程加速下载
  12. 管理Mac的Python环境
  13. 多线程/多进程/异步IO
  14. python学习:continue及break使用
  15. net-snmp 安装与trap调试
  16. word2vec skip-gram系列2
  17. java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL
  18. Redmine 删除 project 中的 public 选项
  19. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
  20. $scope.$apply

热门文章

  1. ios---&gt;NSNotificationCenter传值
  2. 深入JVM类加载器机制,值得你收藏
  3. 练习:等待用户输入input()
  4. session学习总结【session原理、应用、与cookie区别】
  5. 机器学习(ML)九之GRU、LSTM、深度神经网络、双向循环神经网络
  6. POJ_1042_贪心
  7. POJ_1166_暴搜
  8. Codeforces 1065C Make It Equal (差分+贪心)
  9. mongodb 配置文件解释(转)
  10. 超长可视化指南!带你理清K8S部署的故障排查思路,让bug无处遁形