用户:
PlumSteven查看:8 回复:17 评论:8 创建时间:2023-11-12T20:31:56
如题,我先来。
已知Kruskal基于并查集实现,所以Dijkstra不能处理负权边,由此可知A*=BFS+启发式函数。又因为线段树的建树时间复杂度为O(n),得到Prim又慢又难写(Kruskal好写多了还快),于是就可以知道,CDQ分治是用来解决偏序问题的。
real_unmber3D的投影公式为:x*300\z y*300\z
围绕y旋转的公式为:z*cos(0-dir)+x*sin(0-dir) z*sin(0-dir)-x*cos(0-dir)
点赞0
评论
LiaoxyuCMimport random
print("欢迎来到猜数字游戏!")
print("我已经想好了一个1到100之间的数字,请你猜一猜是多少。")
secret_number = random.randint(1, 100)
guesses = 0
while True:
guess = input("你猜是多少? ")
guess = int(guess)
guesses += 1
if guess == secret_number:
print("恭喜你,猜对了!你一共猜了", guesses, "次。")
break
elif guess < secret_number:
print("太小了,再试试吧。")
else:
print("太大了,再试试吧。")
点赞0
评论
我是新人,刚学IOI,请问可持久化离散化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套喵树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP怎么写?
点赞1
评论
参加过ISIJ2023,不信请看(www.n(啥也没说)oi.c(啥也没说)n/xw/2023-07-08/793995.shtml),会后缀数组,splay,网络流,可持久化并查集,DancingLinks,树链剖分,喵树,带修改的莫队等进阶算法,学习编程6年,但wmh比我更值得点赞n倍(n>1000)
DancingLinks代码:
#include <bits/stdc++.h>
using namespace std;
const int N=5511;
int n,m;
int l[N];
int r[N];
int u[N],d[N];
int s[N];
int ro[N],co[N];
int idx;
int ans[N];
int top;
inline void init()
{
for(int i=0;i<=m;i++)
{
l[i]=i-1;
r[i]=i+1;
u[i]=d[i]=i;
}
idx=m+1;
l[0]=m,r[m]=0;
}
inline void add(int & hh,int & tt,int x,int y)
{
ro[idx]=x,co[idx]=y,s[y]++;
u[idx]=y;
d[idx]=d[y];
u[d[y]]=idx;
d[y]=idx;
r[hh]=l[tt]=idx;
r[idx]=tt;
l[idx]=hh;
tt=idx++;
}
inline void remove(int p)
{
r[l[p]]=r[p];
l[r[p]]=l[p];
for(int i=d[p];i!=p;i=d[i])
{
for(int j=r[i];j!=i;j=r[j])
{
s[co[j]]--;
u[d[j]]=u[j];
d[u[j]]=d[j];
}
}
}
inline void resume(int p)
{
for(int i=u[p];i!=p;i=u[i])
{
for(int j=l[i];j!=i;j=l[j])
{
u[d[j]]=j;
d[u[j]]=j;
s[co[j]]++;
}
}
r[l[p]]=p;
l[r[p]]=p;
}
bool dfs()
{
if(r[0]==0)return 1;
int p=r[0];
for(int i=r[0];i;i=r[i])
{
if(s[i]<s[p])p=i;
}
remove(p);
for(int i=d[p];i!=p;i=d[i])
{
ans[++top]=ro[i];
for(int j=r[i];j!=i;j=r[j])remove(co[j]);
if(dfs())return 1;
for(int j=l[i];j!=i;j=l[j])resume(co[j]);
top--;
}
resume(p);
return 0;
}
int main()
{
cin>>n>>m;
init();
for(int i=1;i<=n;i++)
{
int hh,tt;
hh=tt=idx;
for(int j=1;j<=m;j++)
{
int x;
scanf("%d",&x);
if(x)add(hh,tt,i,j);
}
}
if(dfs())
{
for(int i=1;i<=top;i++)
{
printf("%d ",ans[i]);
}
}else
{
puts("No Solution!");
}
return 0;
}点赞2
评论
#include<stdio/h>
int n;
int mian(){
scnaf("%d", &n);
whlie(--n)<%
puts("NO");
%>
reutrn 0;
}
点赞0
评论