html5 canvas程序演示--P1197 [JSOI2008]星球大战

 <!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>html5程序演示--P1197 [JSOI2008]星球大战</title>
<style type="text/css">
input{
width: 100px;
height: 30px;
border-radius: 20px;
margin: 2px;
outline: none;
}
</style>
</head> <body>
<canvas id="mycanvas" width="800" height="520" style="float: left;background: #A9A9A9">
很抱歉,您的浏览器暂不支持HTML5的canvas
</canvas>
<div style="display: flex;flex-direction:column">
<input type="button" id="init" value="正向初始状态" onClick="initStarWar()">
<input type="button" id="reverse" value="反向初始状态" onClick="reverseInit()">
<input type="button" id="before" value="上一步" onClick="beforeStep()">
<input type="button" id="next" value="下一步" onClick="nextStep()">
</div>
<script>
var context;
//设置画布Canvas相关属性
function loadCanvas(){
//定义变量获取画布DOM
var canvas=document.getElementById("mycanvas");
//设置绘画环境为2d
context=canvas.getContext("2d");
context.lineWidth=3;
context.strokeStyle="#3A7BFC";
context.fillStyle="#987654";
context.font="20px 隶书";
context.save();
}
loadCanvas();
//画直线,画以太隧道
function drawLine(x1,y1,x2,y2){
// context.strokeStyle="#3A7BFC";
context.beginPath();
context.moveTo(x1,y1);
//用lineTo设置终点
context.lineTo(x2,y2);
//开始画线
context.stroke();
context.closePath();
}
drawLine(250,250,100,300);
drawLine(350,350,100,300);
//画圆圈,画星球
function drawCircle(x,y,number){
var radius=15; context.fillStyle="#A9A9A9";
context.beginPath();
//画圆圈
context.arc(x,y,radius,0,Math.PI*2);
//写文字
context.fillText(number,x-4,y+7);
//开始画线 context.fill();
context.stroke();
context.closePath();
context.beginPath();
context.fillStyle="#987654";
//写文字
context.fillText(number,x-4,y+7);
context.closePath(); } drawCircle(130,130,5);
context.clearRect(0,0,800,600);
//数组操作,找到每一个星球
var star=new Array();
star[0]=[80,70,0];
star[1]=[380,120,5];
star[2]=[380,220,0];
star[3]=[530,270,3];
star[4]=[380,320,0];
star[5]=[440,480,2];
star[6]=[680,70,4];
star[7]=[530,170,1];
// drawCircle(star[0][0],star[0][1],0); // context.globalCompositeOperation="xor";
var edge=[[7,2,1],[5,0,2],[4,5,2],[2,3,3],[3,4,3],[6,5,4],[0,6,4],[7,6,4],[3,6,4],[0,1,5],[1,6,5],[1,2,5],[7,1,5]]; //记录状态的变量step
var step=5; //初始化星球大战
function initStarWar(){
context.clearRect(0,0,800,600);
step=5;
// alert(step);
for(var i=0;i<13;i++){
var begin=edge[i][0];
var end=edge[i][1];
drawLine(star[begin][0],star[begin][1],star[end][0],star[end][1]);
}
for(var i=0;i<8;i++){
drawCircle(star[i][0],star[i][1],i);
}
}
initStarWar();
//反向初始状态
function reverseInit(){
context.clearRect(0,0,800,600);
step=0;
// alert(step);
for(var i=0;i<13;i++){
if(edge[i][2]==0){
var begin=edge[i][0];
var end=edge[i][1];
drawLine(star[begin][0],star[begin][1],star[end][0],star[end][1]);
}
}
for(var i=0;i<8;i++){
if(star[i][2]==0){
drawCircle(star[i][0],star[i][1],i);
}
}
}
// reverseInit();
//下一步
function nextStep(){
context.clearRect(0,0,800,600);
step++;
if(step>=5) step=5;
// alert(step);
for(var i=0;i<13;i++){
if(edge[i][2]<=step){
var begin=edge[i][0];
var end=edge[i][1];
drawLine(star[begin][0],star[begin][1],star[end][0],star[end][1]);
}
if(edge[i][2]==step){
context.save();
context.strokeStyle="#FF0000";
context.fillStyle="#FF0000";
drawLine(star[begin][0],star[begin][1],star[end][0],star[end][1]);
context.restore();
}
}
for(var i=0;i<8;i++){
if(star[i][2]<=step){
drawCircle(star[i][0],star[i][1],i);
}
if(star[i][2]==step){
context.save();
context.strokeStyle="#FF0000";
context.fillStyle="#FF0000";
drawCircle(star[i][0],star[i][1],i);
context.restore();
}
}
}
//上一步
function beforeStep(){
context.clearRect(0,0,800,600);
step--;
if(step<=0) step=0;
// alert(step);
for(var i=0;i<13;i++){
if(parseInt(edge[i][2])<=step){
var begin=edge[i][0];
var end=edge[i][1];
drawLine(star[begin][0],star[begin][1],star[end][0],star[end][1]);
}
if(edge[i][2]==step){
context.save();
context.strokeStyle="#FF0000";
context.fillStyle="#FF0000";
drawLine(star[begin][0],star[begin][1],star[end][0],star[end][1]);
context.restore();
}
}
for(var i=0;i<8;i++){
if(parseInt(star[i][2])<=step){
drawCircle(star[i][0],star[i][1],i);
}
if(star[i][2]==step){
context.save();
context.strokeStyle="#FF0000";
context.fillStyle="#FF0000";
drawCircle(star[i][0],star[i][1],i);
context.restore();
}
}
}
</script> </body>
</html>

对应的题目

题目描述

很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系。某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。

但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来。现在,反抗军首领交给你一个任务:给出原来两个星球之间的以太隧道连通情况以及帝国打击的星球顺序,以尽量快的速度求出每一次打击之后反抗军占据的星球的连通快的个数。(如果两个星球可以通过现存的以太通道直接或间接地连通,则这两个星球在同一个连通块中)。

输入输出格式

输入格式:

输入文件第一行包含两个整数,N (1 <= N <= 2M) 和M (1 <= M <= 200,000),分别表示星球的数目和以太隧道的数目。星球用0~N-1的整数编号。

接下来的M行,每行包括两个整数X, Y,其中(0<=X<>Y<N),表示星球X和星球Y之间有以太隧道。注意所有的以太隧道都是双向的。

接下来一行是一个整数K,表示帝国计划打击的星球个数。

接下来的K行每行一个整数X,满足0<=X<N,表示帝国计划打击的星球编号。帝国总是按输入的顺序依次摧毁星球的。

输出格式:

输出文件的第一行是开始时星球的连通块个数。

接下来的K行,每行一个整数,表示经过该次打击后现存星球的连通块个数。

输入输出样例

输入样例#1: 复制

8 13
0 1
1 6
6 5
5 0
0 6
1 2
2 3
3 4
4 5
7 1
7 2
7 6
3 6
5
1
6
3
5
7
输出样例#1: 复制

1
1
1
2
3
3

说明

[JSOI2008]

html5 canvas程序演示--P1197 [JSOI2008]星球大战的更多相关文章

  1. P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反)

    P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反) 并查集本来就是连一对不同父亲的节点就的话连通块就少一个. 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统 ...

  2. 洛谷P1197 [JSOI2008] 星球大战 [并查集]

    题目传送门 星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这 ...

  3. P1197 [JSOI2008]星球大战

    题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道 ...

  4. luogu P1197 [JSOI2008]星球大战

    题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道 ...

  5. Luogu P1197 [JSOI2008]星球大战 By cellur925

    题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧 ...

  6. P1197 [JSOI2008]星球大战[并查集+图论]

    题目来源:洛谷 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球 ...

  7. P1197 [JSOI2008]星球大战——链式前向星+并查集

    https://www.luogu.org/problem/P1197 这道题算是关闭农场的加强版吧,数据有点大,矩阵存不下: 也是记录删点操作,从后往前加边: 先将每个点都算成一个连通块,然后每连一 ...

  8. 洛谷 P1197 [JSOI2008]星球大战——并查集

    先上一波题目 https://www.luogu.org/problem/P1197 很明显删除的操作并不好处理 那么我们可以考虑把删边变成加边 只需要一波时间倒流就可以解决拉 储存删边顺序倒过来加边 ...

  9. 洛谷P1197 [JSOI2008]星球大战

    题目 由于题目不要求强制在线,所以可以离线. 而离线的话就会带来许多便利,所以我们可以先处理出全部打击后的图,通过并查集来判断是否连通. 然后再从后往前枚举,得出答案 #include <bit ...

随机推荐

  1. 零基础入门学习Python(32)--异常处理:你不可能总是对的

    知识点 即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误.运行期检测到的错误被称为异常. 大多数的异常都不会被程序处理,都以错误信息的形式展现在这里: Python标准异常总结 序 ...

  2. U盘启动盘制作工具(安装Linux)

    2018-09-15 17:36:42 1. Etcher  官网:https://etcher.io/ 资料来源:https://linuxmint-installation-guide.readt ...

  3. rbac组件之菜单操作(三)

    菜单包括菜单列表,菜单列表不仅将菜单列出来,而且将每个菜单下的权限也列出来.菜单的添加.删除.修改. urls.py ... re_path(r'^menus/list/$', MenuView.as ...

  4. LeetCode(48)Rotate Image

    题目 You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise ...

  5. LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  6. sscanf,sprintf

    sprintf函数 sprintf函数原型为 int sprintf(char str, const char format, ...).作用是格式化字符串,具体功能如下所示: 将数字变量转换为字符串 ...

  7. SQL SERVER占用CPU过高排查和优化

    操作系统是Windows2008R2 ,数据库是SQL2014 64位. 近阶段服务器出现过几次死机,管理员反馈机器内存使用率100%导致机器卡死.于是做了个监测服务器的软件实时记录CPU数据,几日观 ...

  8. 如何使用JDK1.6 API

    如何使用JDK1.6 API-------https://jingyan.baidu.com/article/54b6b9c0e39a102d583b47d5.html  

  9. 九度oj 题目1061:成绩排序

    题目1061:成绩排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:24473 解决:6960 题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排 ...

  10. CF585E:Present for Vitalik the Philatelist

    n<=500000个2<=Ai<=1e7的数,求这样选数的方案数:先从其中挑出一个gcd不为1的集合,然后再选一个不属于该集合,且与该集合内任意一个数互质的数. 好的统计题. 其实就 ...