bzoj3380+3381+3382+3383 Usaco2004 Open

四道比较水的题

T1:SPFA+状压

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<queue>
 5 #define INF 0x3f3f3f3f
 6 using namespace std;
 7 int n,m,K,id[20],dis[102][102],num,N,f[1<<14][15],ans,vis[102],mp[102][102];
 8
 9 void get_dis(int num){
10     queue<int> Q; memset(vis,0,sizeof(vis));
11     Q.push(num); dis[num][num]=INF; vis[num]=1;
12     while (!Q.empty()){
13         int now=Q.front(); Q.pop();
14         for (int i=1; i<=n; i++){
15             if (mp[now][i]!=0){
16                 dis[num][i]=max(dis[num][i],min(dis[num][now],mp[now][i]));
17                 if (!vis[i]) Q.push(i),vis[i]=1;
18             }
19         }
20     }
21 }
22
23 int main(){
24     scanf("%d%d%d", &n, &m, &K);
25     for (int i=1; i<=K; i++) scanf("%d", &id[i]);
26     memset(dis,0,sizeof(dis));
27     for (int i=1,u,v,w; i<=m; i++) scanf("%d%d%d", &u, &v, &w),mp[v][u]=mp[u][v]=w;
28     for (int i=1; i<=n; i++) get_dis(i);
29     N=(1<<K);
30     for (int i=1; i<=K; i++) f[1<<(i-1)][i]=1;
31     for (int s=1; s<N; s++){
32         num=0;
33         for (int i=1; i<=K; i++) if (s&(1<<(i-1))) num++;
34         for (int i=1; i<=K; i++) if (s&(1<<(i-1))){
35             for (int j=1; j<=K; j++) if (!(s&(1<<(j-1))))
36                 if (num<=dis[id[i]][id[j]]) f[s^(1<<(j-1))][j]|=f[s][i];
37         }
38         for (int i=1; i<=K; i++) if ((s&(1<<(i-1))) && f[s][i]){
39             int t=min(num,dis[id[i]][1]);
40             ans=max(ans,t);
41         }
42     }
43     printf("%d\n", ans);
44     return 0;
45 }

T2:裸RMQ

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 const int maxn = 25010;
 7 int n,m,f[maxn][20];
 8 int main(){
 9     scanf("%d%d", &n, &m);
10     for (int i=1; i<=n; i++) scanf("%d", &f[i][0]);
11     for (int j=1; (1<<j)<=n; j++)
12         for (int i=1; i+(1<<(j-1))<=n; i++)
13             f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
14     for (int i=1,a,b; i<=m; i++){
15         scanf("%d%d", &a, &b);
16         int t=log(b-a+1)/log(2);
17         printf("%d\n", min(f[a][t],f[b-(1<<t)+1][t]));
18     }
19     return 0;
20 }

T3:曼哈顿距离转切比雪夫距离

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 #define INF 1000010
 5 using namespace std;
 6 int n,a,b,x,y,mxx,mxy,mnx,mny;
 7 int main(){
 8     scanf("%d", &n);
 9     mxx=mxy=-INF; mnx=mny=INF;
10     for (int i=1; i<=n; i++){
11         scanf("%d%d", &a, &b);
12         x=b+a; y=b-a;
13         mnx=min(mnx,x); mxx=max(mxx,x);
14         mny=min(mny,y); mxy=max(mxy,y);
15     }
16     printf("%d\n", max(mxx-mnx,mxy-mny));
17     return 0;
18 }

T4:set+最短路

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<queue>
 4 #include<set>
 5 #include<algorithm>
 6 using namespace std;
 7 const int maxn = 50010;
 8 struct node{
 9     int x,y,id;
10     friend bool operator<(node a, node b){
11         if (a.x==b.x) return a.y<b.y;
12         return a.x<b.x;
13     }
14 };
15 int n,t,x[maxn],y[maxn],dis[maxn];
16 queue<int> Q;
17 set<node> st;
18 node mk(int x, int y, int id){
19     node a; a.x=x; a.y=y; a.id=id; return a;
20 }
21 int main(){
22     scanf("%d%d", &n, &t);
23     for (int i=1; i<=n; i++){
24         scanf("%d%d", &x[i], &y[i]);
25         st.insert(mk(x[i],y[i],i));
26     }
27     dis[0]=0; x[0]=y[0]=0;
28     Q.push(0);
29     while (!Q.empty()){
30         int now=Q.front(); Q.pop();
31         for (int i=-2; i<=2; i++) for (int j=-2; j<=2; j++){
32             int X=x[now]+i, Y=y[now]+j;
33             set<node>::iterator next=st.find(mk(X,Y,0));
34             if (next!=st.end()){
35                 dis[next->id]=dis[now]+1;
36                 Q.push(next->id);
37                 if (Y>=t){
38                     printf("%d\n", dis[next->id]);
39                     return 0;
40                 }
41                 st.erase(next);
42             }
43         }
44     }
45     puts("-1");
46     return 0;
47 }

时间: 2024-10-16 09:28:15

bzoj3380+3381+3382+3383 Usaco2004 Open的相关文章

[自制简单操作系统] 3、内存管理和窗口叠加

1.本次主要进展 >_<" 这次主要学习了系统内存管理和窗口叠加~由于上两篇都做了详细的框架说明和介绍,这里直接上代码! 2.文件及函数构成 >_<" 这里和第二篇相比,把鼠标和键盘的相关函数独立出来放进各自相应的文件中,并主要在内存管理和窗口叠加进行探索,同时还有部分代码整理~ 1 /* In this file, not only have the defination of the function, but also 2 hava the descrip

[自制简单操作系统] 2、鼠标及键盘中断处理事件[PIC\GDT\IDT\FIFO]

1.大致介绍: >_<" 大致执行顺序是:ipl10.nas->asmhead.nas->bootpack.c PS: 这里bootpack.c要调用graphic.c.dsctbl.c.fifo.c.int.c实现功能,其中有些函数还必须汇编来写,所以单独写一个汇编文件naskfunc.nas,为了方便看全部函数和结构体,所以写一个bootpack.h来写一些结构体和函数声明~ >_<" 下面是编译图解:最终生成的haribote.img可放在软盘

mysql工作中用的语句

podo表: 根据域id查询201406月的收发信数量: select count(*) from mail_log_201406 where mail_from like '%@js.158pe.com'; select count(*) from mail_log_201406 where rcpt_to like '%@js.158pe.com'; 根据域id,更改落地机: update mailbox set host=新地址的int型转换 where domain=域id 企业扩容和用

10000以内unicode对照表

0 . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8   9   10   11   12   13 . 14 . 15 . 16 . 17 . 18 . 19 . 20 . 21 . 22 . 23 . 24 . 25 . 26 . 27 . 28 . 29 . 30 . 31   32 ! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43 , 44 - 45 . 46 / 47 0 48 1 49 2 50 3 5

Hsql中In没有1000的限制

SELECT * FROM user where id in (1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 5

算法设计与分析 - 李春葆 - 第二版 - pdf-&gt;word v3

1 1.1 第1章─概论 2 3 1.1.1 练习题 4 1. 下列关于算法的说法中正确的有( ). 5 Ⅰ.求解某一类问题的算法是唯一的 6 Ⅱ.算法必须在有限步操作之后停止 7 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 8 Ⅳ.算法执行后一定产生确定的结果 9 A. 1个 B.2个 C.3个 D.4个 10 2. T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是( ). 11 A.T(n)= T(n-1)+1,T(1)=1 B.T(n)= 2n2 12 C.T(n)

立即执行函数(IIFE)的理解与运用

作为JavaScript的常用语法,立即执行函数IIFE(Immediately-Invoked Function Expression)是值得我们认真去学习探究的. 一.创建函数的两种方式 我们先从基础讲起,要创建一个JS函数,有两种方式. (一)函数定义(Function Declaration) function Identifier ( Parameters ){ FunctionBody } 函数定义中,参数(Parameters)标识符(Identifier )是必不可少的.如果遗漏

System.Windows.Forms

1 File: winforms\Managed\System\WinForms\DataGridView.cs 2 Project: ndp\fx\src\System.Windows.Forms.csproj (System.Windows.Forms) 3 4 //------------------------------------------------------------------------------ 5 // <copyright file="DataGridVi

Openfire Strophe开发中文乱码问题

网站上有很多Openfire Web方案,之前想用Smack 但是jar包支持客户端版本的,还有JDK版本问题  一直没调试成功  估计成功的方法只能拜读源码进行修改了. SparkWeb 官网代码很久没维护  CSDN上下来个版本但jar包路径不对  花了不少时间总算能跑起来,不过版本是flex3版本,太老了   自己花精力升级有点费时间呀 最后采用存脚本开发Strophejs,下面网站写的很详细 学习的网站:http://www.dotblogs.com.tw/sungnoone/archi