845G|845G - Shortest Path Problem?(线性基)
845G - Shortest Path Problem?
题意:给一个树,求1到n的最短路径。这里的路径定义为异或和。
文章图片
线性基~
文章图片
文章图片
1 #include2 using namespace std; 3 #define ll long long 4 struct LiBase{ 5ll a[63]; 6//初始化 7void init(){ 8memset(a,0,sizeof(a)); 9} 10//插入 11bool insert_(ll x){ 12for(int i=62; i>=0&&x; i--)if(x&(1LL<0; 19} 20//最大 21ll query_min(ll x){ 22ll ans=x; 23for(int i=62; i>=0; i--){ 24if((ans^a[i])a[i]; 25} 26return ans; 27} 28 }; 29 const int maxv=100010; 30 const int maxe=100010; 31 int head[maxv]; 32 int cnt=0; 33 struct Edge{ 34int v,nex; 35ll w; 36Edge(int v=0,ll w=0,int nex=0):v(v),w(w),nex(nex){} 37 }e[maxe<<1]; 38 void init(){ 39cnt=0; 40memset(head,-1,sizeof(head)); 41 } 42 void add(int u,int v,ll w){ 43e[cnt]=Edge(v,w,head[u]); 44head[u]=cnt++; 45e[cnt]=Edge(u,w,head[v]); 46head[v]=cnt++; 47 } 48 49 LiBase lb; 50 int n,m; 51 int dfsk; 52 ll dis[maxv],pre[maxv]; 53 54 void dfs(int u,int id){ 55pre[u]=++dfsk; 56for(int i=head[u]; ~i; i=e[i].nex){ 57if(i==(id^1)) continue; 58int v=e[i].v; 59if(!pre[v]){ 60dis[v]=e[i].w^dis[u]; 61dfs(v,i); 62}else if(pre[v] dis[v]); 63} 64 } 65 66 void get_cir(){ 67memset(pre,0,sizeof(pre)); 68memset(dis,0,sizeof(dis)); 69dfsk=0; 70dfs(1,-1); 71 } 72 int main(){ 73while(scanf("%d%d",&n,&m)!=EOF){ 74int u,v; 75ll w; 76init(); lb.init(); 77for(int i=0; i
View Code 【845G|845G - Shortest Path Problem?(线性基)】
转载于:https://www.cnblogs.com/yijiull/p/7425490.html
推荐阅读
- Python(pathlib模块)
- Realm
- 古有商鞅变法,今有Pathways攻占头马
- C#|C# 文件路径操作
- mac升级之(xcrun:|mac升级之:xcrun: error: invalid active developer path, missing xcrun)
- 《七天爬虫进阶系列》|《七天爬虫进阶系列》 - 02 数据解析之 XPath
- node.js-path模块你了解多少
- 2018-04-26|2018-04-26 Use glob to filter folders under a path
- ***|*** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]
- LeetCode|LeetCode 437. Path Sum III