当前位置: 首页 > news >正文

CF2135 C. By the Assignment

C.By the Assignment


原题链接

题意简述

给定一张无向图,每个点带有一个权值,要求图上任意两点之间的简单路径权值异或和相同,现在权值存在缺失,缺失的权值为-1,求补全图使之满足性质的方式有多少种?

解题思路

手玩两组样例,不难发现由于异或自反性的限制,可以把无向图分成若干个 "边双",满足某个边双中如果存在奇环则其一定权值得为0,如果不存在则这个边双权值处处相等。直接bcc把图分解为若干个边双,二分图染色判断环是否为奇环,然后利用乘法原理累乘就做完了。

AC code

//Stop learning useless algorithms, go and solve some problems, learn how to use binary search.
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
const int mod=998244353;
struct DECC{vector< vector<pair<int,int> >>G;vector< vector<int> >B;// 存储所有边双连通分量vector<int>dfn,low;//时间戳stack<int>st;vector<char>vis;vector<int>mp;// 每个点属于哪个分量int cnt,n,id;DECC(int n):n(n),cnt(0),id(0){G.resize(n+1);low.resize(n+1);dfn.resize(n+1);mp.resize(n+1);}void add(int x,int y){++id;G[x].push_back({y,id});G[y].push_back({x,id});}void tarjan(int u,int fa){dfn[u]=low[u]=(++cnt);st.push(u);for(auto &[v,id]:G[u]){if(!dfn[v]){tarjan(v,id);low[u]=min(low[u],low[v]);}else if(id!=fa&&dfn[v]<dfn[u]){low[u]=min(low[u],dfn[v]);}}if(dfn[u]==low[u]){vector<int>tmp;int y;do{y=st.top();mp[y]=B.size();st.pop();tmp.push_back(y);}while(y!=u);if(!tmp.empty()) B.push_back(tmp);}}void run(){for(int i=1;i<=n;i++){if(!dfn[i]) tarjan(i,0);}}
};
void solve(){int n,m;ll v;cin>>n>>m>>v;vector<int>a(n+1);for(int i=1;i<=n;i++) cin>>a[i];DECC decc(n+1);for(int i=1;i<=m;i++){int x,y;cin>>x>>y;decc.add(x,y);}decc.run();vector<int>col(n+1,-1);auto bfs=[&](vector<int>&a) ->bool {queue<int>Q;Q.push(a.front());col[a.front()]=0;while(!Q.empty()){int u=Q.front();Q.pop();for(auto &[v,id]:decc.G[u]){if(decc.mp[v]!=decc.mp[u]) continue;if(col[v]==-1){Q.push(v);col[v]=(col[u]^1);}else if(col[v]==col[u]) return false;}}return true;};ll ans=1;for(int i=0;i<decc.B.size();i++){if(decc.B[i].front()>n) continue;if(bfs(decc.B[i])) {int val=-1;for(int j=0;j<decc.B[i].size();j++){int u=decc.B[i][j];if(a[u]!=-1) {val=a[u];break;}}for(int j=0;j<decc.B[i].size();j++){int u=decc.B[i][j];if(val!=a[u]&&a[u]!=-1){cout<<0<<endl;return;}a[u]=val;}if(val==-1) ans=ans*v%mod;}else{for(int j=0;j<decc.B[i].size();j++){int u=decc.B[i][j];if(a[u]==-1) a[u]=0;else if(a[u]!=0) {cout<<0<<endl;return;}}}}cout<<ans<<endl;
}
int main(){cin.tie(0)->ios::sync_with_stdio(false);int T=1;cin>>T;while(T--) solve();return 0;
}
http://www.gsyq.cn/news/23628.html

相关文章:

  • 触想参与国家标准起草,助力行业规范化发展
  • Burp Suite Professional 2025.10 发布 - Web 应用安全、测试和扫描
  • F5 BIG-IP 15.1.10.8 - 领先的应用交付与安全服务
  • XPath索引定位深度解析://X[n]与(//X)[n]的本质区别
  • 2025年10月波形护栏厂家推荐榜单:基于公开数据的中立对比与选购参考
  • Index of /python/
  • 2025年10月项目管理工具推荐榜:十款主流平台深度对比与选购指南
  • GRPO
  • 2025年10月止痒控油洗发水评测推荐:聚焦头皮屏障修复与临床验证的排名解析
  • 2025年10月石墨电极厂家推荐排名:晶碳科技产品矩阵与合规资质透视
  • 2025年10月领先品牌认证机构推荐榜:尚普与华信人深度对比评测
  • RM500U-EA
  • 2025年10月槲皮素产品推荐榜:五款热门单品深度对比与中立评测
  • System.Windows.Forms.DataVisualization.Charting 完全指南
  • 区间压缩dp(poj3254)
  • 完整教程:C++STL之list
  • 13 Static 关键字的作用
  • DS:一个处理php前端数据的实用类
  • rk3399 安卓7 添加 exfat 格式U 盘支持
  • 2025年10月ai优化推荐对比榜:十强服务商数据化拆解与选择策略
  • 深入解析:图书馆自习室|基于SSM的图书馆自习室座位预约小程序设计与实现(源码+数据库+文档)
  • 21-java-grpc-demo-1
  • 【AI绘画】你有多久没有打开SD了?
  • 2025年10月geo优化供应商推荐榜:十强对比评测与中立选购指南
  • 标准差和方差
  • 2025年10月geo优化推荐榜单:十强服务商全维度对比与中立选购指南
  • 2025年10月geo公司推荐榜:基于全平台同步优化能力的中立对比与选购指南
  • 2025年10月geo服务商推荐榜:十强对比与中立评测助您精准选型
  • 常见数据结构长度的获取
  • 2025年10月GEO推荐榜单:十家技术服务商深度对比与中立评测