1.后台管理之电影管理

1.1 电影管理之所有电影收藏列表

1.1.1 电影管理之电影收藏列表视图函数

在admin目录下的views.py文件中定义电影收藏列表视图函数

电影收藏列表视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route('/moviecol/list/<int:page>/', methods=["GET"])
@admin_login_req
@admin_auth
def moviecol_list(page=None):
if page is None:
page = 1
page_data = Moviecol.query.join(Movie).join(User).filter(
Movie.id == Moviecol.movie_id,
User.id == Moviecol.user_id
).order_by(Moviecol.addtime).paginate(page=page, per_page=10)
return render_template("admin/moviecol_list.html", page_data=page_data)

1.1.2 电影管理之电影收藏列表前端页面

电影收藏列表前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import "ui/admin_page.html" as pg %} {% block content %}
<section class="content-header">
<h1>微电影管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 收藏管理</a></li>
<li class="active">收藏列表</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">收藏列表</h3>
<div class="box-tools">
<div class="input-group input-group-sm" style="width: 150px;">
<input type="text" name="table_search" class="form-control pull-right"
placeholder="请输入关键字..."> <div class="input-group-btn">
<button type="submit" class="btn btn-default"><i class="fa fa-search"></i>
</button>
</div>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding"> <!--消息提示-->
{% for msg in get_flashed_messages(category_filter=["ok"]) %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-check"></i> 操作成功</h4>
{{ msg }}
</div>
{% endfor %} <table class="table table-hover">
<tbody>
<tr>
<th>ID</th>
<th>电影</th>
<th>用户</th>
<th>添加时间</th>
<th>操作事项</th>
</tr>
{% for v in page_data.items %}
<tr>
<td>{{ v.id }}</td>
<td>{{ v.movie.title }}</td>
<td>{{ v.user.name }}</td>
<td>{{ v.addtime }}</td>
<td>
<a href="{{ url_for('admin.moviecol_del',id=v.id) }}" class="label label-danger">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="box-footer clearfix">
{{ pg.page(page_data,"admin.moviecol_list") }}
</div>
</div>
</div>
</div>
</section>
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-7").addClass('active');
$("#g-7-1").addClass('active');
});
{% endblock %}

1.2 电影管理之删除电影收藏

1.2.1 电影管理之删除电影收藏视图函数

在admin目录下的views.py文件中定义删除电影视图函数

删除电影视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route("/moviecol/del/<int:id>/", methods=['GET'])
@admin_login_req
@admin_auth
def moviecol_del(id=None):
moviecol = Moviecol.query.get_or_404(int(id))
db.session.delete(moviecol)
db.session.commit()
flash("删除收藏成功", "ok")
return redirect(url_for("admin.moviecol_list", page=1))

2.后台管理之日志管理

2.1 日志管理之用户操作列表

2.1.1 日志管理之用户操作日志列表视图函数

在admin目录下的views.py文件中定义用户操作日志列表视图函数

用户操作日志列表视图函数需要被登录控制装饰器权限控制装饰器同时装饰

# 用户操作日志
@admin.route('/oplog/list/<int:page>/', methods=['GET'])
@admin_login_req
@admin_auth
def oplog_list(page=None):
if page is None:
page = 1
page_data = Oplog.query.join(Admin).filter(Admin.id == Oplog.admin_id).order_by(
Oplog.addtime
).paginate(page=page, per_page=5) return render_template("admin/oplog_list.html", page_data=page_data)

2.1.2 日志管理之用户操作日志列表前端页面

用户操作日志列表前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import 'ui/admin_page.html' as pg %} {% block content %}
<!--内容-->
<section class="content-header">
<h1>微电影管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 日志管理</a></li>
<li class="active">操作日志列表</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">操作日志列表</h3>
<div class="box-tools">
<div class="input-group input-group-sm" style="width: 150px;">
<input type="text" name="table_search" class="form-control pull-right"
placeholder="请输入关键字..."> <div class="input-group-btn">
<button type="submit" class="btn btn-default"><i class="fa fa-search"></i>
</button>
</div>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover">
<tbody>
<tr>
<th>编号</th>
<th>管理员</th>
<th>操作时间</th>
<th>操作原因</th>
<th>操作IP</th>
</tr>
{% for v in page_data.items %}
<tr>
<td>{{ v.id }}</td>
<td>{{ v.admin.name }}</td>
<td>{{ v.addtime }}</td>
<td>{{ v.reason }}</td>
<td>{{ v.ip }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="box-footer clearfix">
{{ pg.page(page_data,'admin.oplog_list') }}
</div>
</div>
</div>
</div>
</section>
<!--内容-->
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-8").addClass('active');
$("#g-8-1").addClass('active');
});
{% endblock %}

2.2 日志管理之管理员登录日志

2.2.1 日志管理之管理员登录日志视图函数

在admin目录下的views.py文件中定义管理员登录日志视图函数

管理员登录日志视图函数需要被登录控制装饰器权限控制装饰器同时装饰

# 管理员登录日志
@admin.route('/adminloginlog/list/<int:page>/', methods=['GET'])
@admin_login_req
@admin_auth
def adminloginlog_list(page=None):
if page is None:
page = 1
page_data = Adminlog.query.join(Admin).filter(Admin.id == Adminlog.admin_id).order_by(
Adminlog.addtime
).paginate(page=page, per_page=5)
print(page_data.__dict__)
return render_template("admin/adminloginlog_list.html", page_data=page_data)

2.2.2 日志管理之管理员登录日志前端页面

管理员登录日志前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import 'ui/admin_page.html' as pg %} {% block content %}
<!--内容-->
<section class="content-header">
<h1>微电影管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 日志管理</a></li>
<li class="active">管理员登录日志列表</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">管理员登录日志列表</h3>
<div class="box-tools">
<div class="input-group input-group-sm" style="width: 150px;">
<input type="text" name="table_search" class="form-control pull-right"
placeholder="请输入关键字..."> <div class="input-group-btn">
<button type="submit" class="btn btn-default"><i class="fa fa-search"></i>
</button>
</div>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover">
<tbody>
<tr>
<th>编号</th>
<th>管理员</th>
<th>登录时间</th>
<th>登录IP</th>
</tr>
{% for i in page_data.items %}
<tr>
<td>{{ v.id }}</td>
<td>{{ v.admin.name }}</td>
<td>{{ v.addtime }}</td>
<td>{{ v.ip }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="box-footer clearfix">
{{ pg.page(page_data,'admin.adminloginlog_list') }}
</div>
</div>
</div>
</div>
</section>
<!--内容-->
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-8").addClass('active');
$("#g-8-2").addClass('active');
});
{% endblock %}

2.3 日志管理之会员登录日志

2.3.1 日志管理之会员登录日志列表视图函数

在admin目录下的views.py文件中定义会员登录日志列表视图函数

会员登录日志列表视图函数需要被登录控制装饰器权限控制装饰器同时装饰

# 会员登录日志
@admin.route('/userloginlog/list/<int:page>/', methods=['GET'])
@admin_login_req
@admin_auth
def userloginlog_list(page=None):
if page is None:
page = 1
page_data = Userlog.query.join(User).filter(User.id == Userlog.user_id).order_by(
Userlog.id
).paginate(page=page, per_page=10)
print(page_data)
return render_template("admin/userloginlog_list.html", page_data=page_data)

2.3.2 日志管理之会员登录日志前端页面

会员登录日志前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import 'ui/admin_page.html' as pg %} {% block content %}
<!--内容-->
<section class="content-header">
<h1>微电影管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 日志管理</a></li>
<li class="active">会员登录日志列表</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">会员登录日志列表</h3>
<div class="box-tools">
<div class="input-group input-group-sm" style="width: 150px;">
<input type="text" name="table_search" class="form-control pull-right"
placeholder="请输入关键字..."> <div class="input-group-btn">
<button type="submit" class="btn btn-default"><i class="fa fa-search"></i>
</button>
</div>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover">
<tbody>
<tr>
<th>编号</th>
<th>会员</th>
<th>登录时间</th>
<th>登录IP</th>
</tr>
{% for v in page_data.items %}
<tr>
<td>{{ v.id }}</td>
<td>{{ v.user.name }}</td>
<td>{{ v.addtime }}</td>
<td>{{ v.ip }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="box-footer clearfix">
{{ pg.page(page_data,'admin.userloginlog_list') }}
</div>
</div>
</div>
</div>
</section>
<!--内容-->
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-8").addClass('active');
$("#g-8-3").addClass('active');
});
{% endblock %}

3.后台管理之权限管理

3.1 定义权限表单

在app的admin目录的forms.py文件中,定义权限表单

# 权限表单
class AuthForm(FlaskForm):
name = StringField(
label="权限名称",
validators=[
DataRequired("请输入权限名称!")
],
description="权限名称",
render_kw={
"class": "form-control",
"placeholder": "请输入权限名称!",
}
)
url = StringField(
label="权限",
validators=[
DataRequired("请输入权限地址!")
],
description="权限地址",
render_kw={
"class": "form-control",
"placeholder": "请输入权限地址!"
}
)
submit = SubmitField(
"添加",
render_kw={
"class": "btn btn-primary",
}
)

3.2 权限管理之所有权限列表

3.2.1 权限管理之权限列表视图函数

在admin目录下的views.py文件中定义权限列表视图函数

权限列表视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route('/auth/list/<int:page>/', methods=['GET'])
@admin_login_req
@admin_auth
def auth_list(page=None):
if page is None:
page = 1
page_data = Auth.query.order_by(Auth.id).paginate(page=page, per_page=10)
return render_template("admin/auth_list.html", page_data=page_data)

3.2.2 权限管理之权限列表前端页面

权限列表前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import "ui/admin_page.html" as pg %} {% block content %}
<!--内容-->
<section class="content-header">
<h1>微电影管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 权限管理</a></li>
<li class="active">权限列表</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<!--消息提示-->
{% for msg in get_flashed_messages(category_filter=["ok"]) %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-check"></i> 操作成功</h4>
{{ msg }}
</div>
{% endfor %} <div class="box-header">
<h3 class="box-title">权限列表</h3>
<div class="box-tools">
<div class="input-group input-group-sm" style="width: 150px;">
<input type="text" name="table_search" class="form-control pull-right"
placeholder="请输入关键字..."> <div class="input-group-btn">
<button type="submit" class="btn btn-default"><i class="fa fa-search"></i>
</button>
</div>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover">
<tbody>
<tr>
<th>编号</th>
<th>名称</th>
<th>地址</th>
<th>添加时间</th>
<th>操作事项</th>
</tr>
{% for v in page_data.items %}
<tr>
<td>{{ v.id }}</td>
<td>{{ v.name }}</td>
<td>{{ v.url }}</td>
<td>{{ v.addtime }}</td>
<td>
<a href='{{ url_for("admin.auth_edit",id=v.id) }}' class="label label-success">编辑</a>
&nbsp;
<a href='{{ url_for("admin.auth_del",id=v.id) }}'
class="label label-danger">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="box-footer clearfix">
{{ pg.page(page_data,"admin.auth_list") }}
</div>
</div>
</div>
</div>
</section>
<!--内容-->
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-9").addClass('active');
$("#g-9-2").addClass('active');
});
{% endblock %}

3.3 权限管理之添加权限

3.3.1 权限管理之添加权限视图函数

在admin目录下的views.py文件中定义添加权限视图函数

添加权限视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route('/auth/add/', methods=["GET", "POST"])
@admin_login_req
@admin_auth
def auth_add():
form = AuthForm()
if form.validate_on_submit():
data = form.data
auth = Auth(
name=data.get('name'),
url=data.get('url'),
)
db.session.add(auth)
db.session.commit()
flash("添加权限成功!", "ok")
return redirect(url_for("admin.auth_list", page=1))
return render_template("admin/auth_add.html", form=form)

3.3.2 权限管理之添加权限前端页面

添加权限前端页面继承admin.html页面

{% extends 'admin/admin.html' %}

{% block content %}
<!--内容-->
<section class="content-header">
<h1>微电影管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 权限管理</a></li>
<li class="active">添加权限</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">添加权限</h3>
</div>
<form role="form" method="post">
<div class="box-body">
<!--提示框消息闪现-->
{% for msg in get_flashed_messages(category_filter=["ok"]) %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×
</button>
<h4><i class="icon fa fa-check"></i> 操作成功</h4>
{{ msg }}
</div>
{% endfor %}
<div class="form-group">
<label for="input_name">{{ form.name.label }}</label>
{{ form.name }}
<!--报错信息-->
{% for err in form.name.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
<div class="form-group">
<label for="input_url">{{ form.url.label }}</label>
{{ form.url }}
<!--报错信息-->
{% for err in form.url.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
</div>
<div class="box-footer">
{{ form.csrf_token }}
{{ form.submit }}
</div>
</form>
</div>
</div>
</div>
</section>
<!--内容-->
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-9").addClass('active');
$("#g-9-1").addClass('active');
});
{% endblock %}

3.4 权限管理之编辑权限

3.4.1 权限管理之编辑权限视图函数

在admin目录下的views.py文件中定义编辑权限视图函数

编辑权限视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route("/auth/edit/<int:id>/", methods=['GET', 'POST'])
@admin_login_req
@admin_auth
def auth_edit(id=None):
form = AuthForm()
auth = Auth.query.get_or_404(id)
if form.validate_on_submit():
data = form.data
auth.name = data.get("name")
auth.url = data.get('url')
db.session.add(auth)
db.session.commit()
flash("修改权限成功!", "ok")
return redirect(url_for("admin.auth_list", page=1))
return render_template("admin/auth_edit.html", form=form, auth=auth)

3.4.2 权限管理之编辑权限前端页面

编辑权限前端页面继承admin.html页面

{% extends 'admin/admin.html' %}

{% block content %}
<!--内容-->
<section class="content-header">
<h1>微电影管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 权限管理</a></li>
<li class="active">添加权限</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">添加权限</h3>
</div>
<form role="form" method="post">
<div class="box-body">
<!--提示框消息闪现-->
{% for msg in get_flashed_messages(category_filter=["ok"]) %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×
</button>
<h4><i class="icon fa fa-check"></i> 操作成功</h4>
{{ msg }}
</div>
{% endfor %}
<div class="form-group">
<label for="input_name">{{ form.name.label }}</label>
{{ form.name(value=auth.name) }}
<!--报错信息-->
{% for err in form.name.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
<div class="form-group">
<label for="input_url">{{ form.url.label }}</label>
{{ form.url(value=auth.url) }}
<!--报错信息-->
{% for err in form.url.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
</div>
<div class="box-footer">
{{ form.csrf_token }}
{{ form.submit }}
</div>
</form>
</div>
</div>
</div>
</section>
<!--内容-->
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-9").addClass('active');
$("#g-9-1").addClass('active');
});
{% endblock %}

3.5 权限管理之删除权限

3.5 权限管理之删除权限视图函数

在admin目录下的views.py文件中定义删除权限视图函数

删除权限视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

@admin.route("/auth/del/<int:id>/", methods=["GET"])
@admin_login_req
@admin_auth
def auth_del(id=None):
auth = Auth.query.filter_by(id=id).first_or_404()
db.session.delete(auth)
db.session.commit()
flash("删除权限成功!", "ok")
return redirect(url_for("admin.auth_list", page=1))

Flask开发微电影网站(九)的更多相关文章

  1. Flask开发微电影网站(一)

    1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定 ...

  2. Flask开发微电影网站(三)

    页面完成后的最终布局 可以看到,页面共同的部分是顶部导航和底部导航 所以我们可以把页面顶部导航和底部导航部分单独定义一个文件home.html,然后让需要使用顶部导航和底部导航的页面都继承home.h ...

  3. Flask开发微电影网站(五)

    后台管理页面是系统管理员登录后对网站进行管理的前端页面 后台登录页面,如下图所示 管理员登录后的页面,如下图所示 管理员登录后,在右上角显示的管理员信息,如下图所示 管理员登录后,在页面中间部分的左侧 ...

  4. Flask开发微电影网站(七)

    1.后台管理之电影管理 1.1 定义电影表单 在app的admin目录的forms.py文件中,定义电影表单 # 电影表单 class MovieForm(FlaskForm): title = St ...

  5. Flask开发微电影网站(六)

    1. 后台管理登录功能实现 1.1 后台管理页面登录表单LoginForm 在app的admin目录下创建forms.py文件,用来保存admin蓝图中需要使用到的表单 from flask_wtf ...

  6. Flask开发微电影网站(二)

    1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库 create ...

  7. Flask开发微电影网站(十)

    1.后台管理之角色管理 1.1 角色管理之定义角色表单 在app的admin目录的forms.py文件中,定义角色表单 # 角色表单 class RoleForm(FlaskForm): name = ...

  8. Flask开发微电影网站(八)

    1.后台管理之电影预告管理 1.1 定义电影预告表单 在app的admin目录的forms.py文件中,定义电影预告表单 # 预告表单 class PreviewForm(FlaskForm): ti ...

  9. Flask开发微电影网站(四)

    会员中心页面,如下图所示 用户登录后,修改密码页面,如下图所示 用户查看自己的评论页面,如下图所示 用户查看自己的登录日志页面,如下图所示 用户查看自己收藏的电影的页面,如下图所示 1. 定义用户主页 ...

随机推荐

  1. Qt中的QWebView

    一.Webkit了解   Webkit是一个开源的浏览器引擎,chrome也使用了作为核心.Qt中对Webkit做了封装,主要有以下几个类: QWebView :最常用的类,作为一个窗体控件 QWeb ...

  2. vue数组变异方法

    Vue数组变异方法,会改变被这些方法调用的原始数组,将会触发视图更新 push() 接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度 pop() 从数组末尾移除最后一项,减少数组的 ...

  3. vue-百度地图-maker文字标签显示隐藏

    html: <div id="allmap" class="map"></div>   script:   mounted() { th ...

  4. php面向对象之构造函数作用与方法

    什么是构造函数呢?构造函数又有什么作用呢? 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个 ...

  5. Shell命令-线上查询及帮助之man、help

    线上查询及帮助 - man.help 1.man:获取命令的帮助信息 man命令的简单介绍 man命令是Linux系统中最核心的命令之一 ,因为通过它可以查看其它Linux命令的使用信息.当然了 ,m ...

  6. python 装饰器练习题

    1.写出完整的装饰器(不用开了带参装饰器,就是普通装饰器)语法 2.有一个计算两个数和的方法,为其添加一个确保两个参数都是int或float类型的装饰器,保证运算不会抛异常 3.有一个一次性录入人名并 ...

  7. element-ui和npm、webpack、vue-cli搭建Vue项目

    一.element-ui的简单使用 1.安装 1. npm 安装 推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用. npm i element-ui -S 2. CDN ...

  8. BZOJ4762 最小集合(动态规划+容斥原理)

    https://www.cnblogs.com/AwD-/p/6600650.html #include<iostream> #include<cstdio> #include ...

  9. BZOJ4621 Tc605(动态规划)

    容易发现最终序列所有数字的相对顺序不变,一个数字可能的覆盖范围由两边第一个比它大的数决定,且若不考虑次数限制所有这样的序列都可以变换得到.对于一个序列,其需要的最少变换次数显然就是覆盖了别的位置的数的 ...

  10. LOJ2340 [WC2018] 州区划分 【FMT】【欧拉回路】

    题目分析: 这题是WC的题??? 令 $g[S] = (\sum_{x \in S}w_x)^p$ $h[S] = g[S]$如果$S$不是欧拉回路 $d[S] = \frac{f[S]}{g[All ...