BZOJ2346 [Baltic 2011]Lamp

只要每条对角线都建一条边

原来对角线有的边权为0,没有的边权为1

最短路即可

 1 /**************************************************************
 2     Problem: 2346
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:1312 ms
 7     Memory:29404 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <cstring>
12 #include <algorithm>
13 #include <queue>
14
15 using namespace std;
16 const int len = 505;
17 const int N = 300005;
18 const int M = 2000005;
19
20 struct edges {
21     int next, to, v;
22     edges() {}
23     edges(int _n, int _t, int _v) : next(_n), to(_t), v(_v) {}
24 } e[M];
25
26 int n, m, Tot, tot;
27 char mp[len][len];
28 int w[len][len], first[N], dis[N];
29
30 struct heap_node {
31     int v, to;
32     heap_node() {}
33     heap_node(int _v, int _to) : v(_v), to(_to) {}
34 };
35 inline bool operator < (const heap_node &a, const heap_node &b) {
36     return a.v > b.v;
37 }
38
39 priority_queue <heap_node> h;
40
41 void Add_Edges(int x, int y, int z) {
42     e[++tot] = edges(first[x], y, z), first[x] = tot;
43     e[++tot] = edges(first[y], x, z), first[y] = tot;
44 }
45
46 inline void add_to_heap(const int p) {
47     for (int x = first[p]; x; x = e[x].next)
48         if (dis[e[x].to] == -1)
49             h.push(heap_node(e[x].v + dis[p], e[x].to));
50 }
51
52 void Dijkstra(int S) {
53     memset(dis, -1, sizeof(dis));
54     while (!h.empty()) h.pop();
55     dis[S] = 0, add_to_heap(S);
56     int p;
57     while (!h.empty()) {
58         if (dis[h.top().to] != -1) {
59             h.pop();
60             continue;
61         }
62         p = h.top().to;
63         dis[p] = h.top().v;
64         h.pop();
65         add_to_heap(p);
66     }
67 }
68
69 void build_graph() {
70     int i, j;
71     for (i = 1; i <= n; ++i)
72         for (j = 1; j <= m; ++j)
73             if (mp[i][j] == ‘\\‘) {
74                 Add_Edges(w[i][j], w[i + 1][j + 1], 0);
75                 Add_Edges(w[i + 1][j], w[i][j + 1], 1);
76             } else {
77                 Add_Edges(w[i][j], w[i + 1][j + 1], 1);
78                 Add_Edges(w[i + 1][j], w[i][j + 1], 0);
79             }
80 }
81
82 int main() {
83     int i, j;
84     scanf("%d%d", &n, &m);
85     for (i = 1; i <= n; ++i)
86         scanf("%s", mp[i] + 1);
87     for (i = 1; i <= n + 1; ++i)
88         for (j = 1; j <= m + 1; ++j)
89             w[i][j] = ++Tot;
90     build_graph();
91     Dijkstra(1);
92     if (dis[Tot] != -1) printf("%d\n", dis[Tot]);
93     else puts("NO SOLUTION");
94     return 0;
95 }

时间: 2024-10-16 10:07:26

BZOJ2346 [Baltic 2011]Lamp的相关文章

bzoj2348[Baltic 2011]Plagiarism*

bzoj2348[Baltic 2011]Plagiarism 题意: n个数,如果其中两个数fi≤fj且fi≥0.9*fj,则它们要被比较.求多少对数要被比较.n≤100000. 题解: 排序然后双指针法. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define inc(i,j,k) for(int i=j;i<=k;i++) 5 #define maxn 100

BZOJ 2348 Baltic 2011 Plagiarism 排序

题目大意:求n个数中有多少无序点对(i,j)满足0.9a[j]<=a[i]<=a[j] <论排序算法的高效性和合理利用以及能否记得使用排序算法> 忘写sort贡献了个WA 2333333 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 100100 #define EPS 1e-7 using namespa

【二分法】【尺取法】bzoj2348 [Baltic 2011]Plagiarism

一开始以为死于精度……调了半天发现死于long long…… 一.二分法: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; bool cmp(const int &a,const int &b){return a>b;} int n,a[100001],b[100001]; long long ans; int main() { scanf(&q

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

bzoj2348

实在不懂为啥网上的题解都是二分,本人没写二分,wa的很惨结果竟然是printf("%d")的锅,改了就A了 2348: [Baltic 2011]Plagiarism Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 586  Solved: 265[Submit][Status][Discuss] Description 世界编程大赛的选手们提交N份程序文件f1, -, fN给评测系统.在将评测结果正式公布之前,评委会想要排除一切可能的剽窃

?搭建LAMP环境及快速部署双网站并实现基于域名的虚拟主机

本节所讲内容: 实战:搭建LAMP环境及快速部署双网站并实现基于域名的虚拟主机 LAMP架构:??? Linux+Apache+Mysql+PHP Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,共同组成了一个强大的Web应用程序平台. 一.安装需要的软件包 [[email protected] ~]# yum install httpd mysql-server mysql php php-mysql  -y ht

lamp脚本一键搭建

使用脚本安装LAMP环境: (1)安装apache的httpd: 脚本内容: [[email protected] bin]# cat apache_install.sh #!/bin/bash #by linuxfan rpm -e httpd httpd-manual --nodeps ls /root/httpd* if [ $? -eq 0 ];then tar zxvf /root/httpd-2.2.17.tar.gz -C /usr/src/ cd /usr/src/httpd-2

Mysql初步认实和搭建LAMP环境部署Ucenter和Ucenter-home网站

目标: 在xuegod63.cn服务器上,使用网站模版UCenter_1.5.0_SC_UTF8.zip和UCenter_Home_2.0_SC_UTF8.zip为公司搭建一个类似人人网的网站.在windows上,使用访问uc.duwers63.cn可以访问UCenter:使用www.duwers63.cn可以访问UCenter_Home. 安装 yum -y install httpd mysql-server mysql phpphp-mysql 软件包解释: httpd #web网站服务器

RedHat下构建LAMP平台+Discuz!论坛

LAMP的简介: lAMP平台的构成组件: Linux:作为LAMP架构的基础,提供用于支撑web站点的操作系统,能够与其他三个组件提供更好地稳定性.兼容性. Apache:作为LAMP架构前端,是一款功能强大.稳定性好的web服务器程序,该服务器直接面向用户提供网站访问,发送网页.图片等内容. Mysql:作为LAMP架构后端,是一款流行的开源关系数据库系统. PHP:作为三种开发动态网页的编程语言,负责解释动态网页文件,并提供web应用程序的开发和运行环境. LAMP平台的应用优势: 1.