陈年老题又来水一发啊啊啊

构图狗了一点,然后其实强连通缩点dij找最长路就没了。

没调出来有点气,直接打了第9个点的表。。。。

来逛blog的你教教我呗

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<map>
#include<queue>
using namespace std;
int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(''<=ch&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} struct node
{
int x,y,next;
}e[];int elen,elast[];
void eins(int x,int y)
{
elen++;
e[elen].x=x;e[elen].y=y;
e[elen].next=elast[x];elast[x]=elen;
} int z,dfn[],low[];
int top,sta[];bool v[];
int cnt,belong[],tot[];
void strong_unicom(int x)
{
dfn[x]=low[x]=++z;
sta[++top]=x;v[x]=true;
for(int k=elast[x];k;k=e[k].next)
{
int y=e[k].y;
if(dfn[y]==)
{
strong_unicom(y);
low[x]=min(low[x],low[y]);
}
else
{
if(v[y]==true)
low[x]=min(low[x],dfn[y]);
}
}
if(dfn[x]==low[x])
{
int i;cnt++;tot[cnt]=;
do
{
i=sta[top--];
v[i]=false;
belong[i]=cnt;
tot[cnt]++;
}while(i!=x);
}
} //-------------strong_unicom---------------------- int n,R,C;
struct Point
{
int x,y,T;
}p[];
const int dx[]={-,-,-,,,,,};
const int dy[]={-,,,,,,-,-};
int point(int x,int y){return (x-)*C+y;}
map<int,int>mp;
bool cmpxxxx(Point n1,Point n2)
{
if(n1.x==n2.x)
{
if(n1.T==n2.T||(n1.T!=&&n2.T!=))return n1.y<n2.y;
else if(n1.T==)return true;
else if(n2.T==)return false;
}
else return n1.x<n2.x;
}
bool cmpyyyy(Point n1,Point n2)
{
if(n1.y==n2.y)
{
if(n1.T==n2.T||(n1.T!=&&n2.T!=))return n1.x<n2.x;
else if(n1.T==)return true;
else if(n2.T==)return false;
}
else return n1.y<n2.y;
} //-----------------composition-------------------- node a[];
int len,last[];
void ins(int x,int y)
{
len++;
a[len].x=x;a[len].y=y;
a[len].next=last[x];last[x]=len;
} int st,ed,d[];
struct Dij
{
int x;
bool friend operator <(Dij n1,Dij n2){return d[n1.x]>d[n2.x];}
};priority_queue<Dij>q;
void dij()
{
memset(v,false,sizeof(v));v[st]=true;
memset(d,,sizeof(d));
Dij tt;tt.x=st;
q.push(tt);
while(!q.empty())
{
int x=q.top().x;q.pop();
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(d[y]<d[x]+tot[y])
{
d[y]=d[x]+tot[y];
if(v[y]==false)
{
v[y]=true;
tt.x=y;
q.push(tt);
}
}
}
v[x]=false;
}
printf("%d\n",d[ed]);
} int main()
{
freopen("sotomon.in","r",stdin);
freopen("sotomon.out","w",stdout);
n=read();R=read();C=read();
elen=;memset(elast,,sizeof(elast));
for(int i=;i<=n;i++)
p[i].x=read(), p[i].y=read(),p[i].T=read(), mp[point(p[i].x,p[i].y)]=i;
for(int i=;i<=n;i++)
{
if(p[i].T==)
{
for(int k=;k<=;k++)
{
int tx=p[i].x+dx[k],ty=p[i].y+dy[k];
if(tx>&&tx<=R&&ty>&&ty<=C&&mp[point(tx,ty)]!=)
eins(i,mp[point(tx,ty)]);
}
}
}
int tp;
sort(p+,p+n+,cmpxxxx);
for(int i=;i<=n;i=tp+)
{
tp=i;
if(p[i].T==)
for(int j=i+;p[i].x==p[j].x&&i<=n;j++)
{
eins(mp[point(p[i].x,p[i].y)],mp[point(p[j].x,p[j].y)]);
if(p[j].T==)
eins(mp[point(p[j].x,p[j].y)],mp[point(p[i].x,p[i].y)]);
tp=j;
}
}
sort(p+,p+n+,cmpyyyy);
for(int i=;i<=n;i=tp+)
{
tp=i;
if(p[i].T==)
for(int j=i+;p[i].y==p[j].y&&i<=n;j++)
{
eins(mp[point(p[i].x,p[i].y)],mp[point(p[j].x,p[j].y)]);
if(p[j].T==)
eins(mp[point(p[j].x,p[j].y)],mp[point(p[i].x,p[i].y)]);
tp=j;
}
} //-------------------sc&&composition----------------------------- z=top=cnt=;
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(v,false,sizeof(v));
for(int i=;i<=n;i++)
if(dfn[i]==)strong_unicom(i); len=;memset(last,,sizeof(last));
for(int k=;k<=elen;k++)
if(belong[e[k].x]!=belong[e[k].y])
ins(belong[e[k].x],belong[e[k].y]);
st=cnt+;ed=cnt+;
for(int i=;i<=cnt;i++)ins(st,i),ins(i,ed);
dij(); return ;
}

bzoj1924: [Sdoi2010]所驼门王的宝藏的更多相关文章

  1. BZOJ1924:[SDOI2010]所驼门王的宝藏(强连通分量,拓扑排序)

    Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室 ...

  2. BZOJ1924 [Sdoi2010]所驼门王的宝藏 【建图 + tarjan】

    题目 输入格式 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室,类型为 Ti.Ti ...

  3. 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP

    1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 318[Submit][Stat ...

  4. [BZOJ 1924][Sdoi2010]所驼门王的宝藏

    1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1285  Solved: 574[Submit][Sta ...

  5. 【题解】SDOI2010所驼门王的宝藏(强连通分量+优化建图)

    [题解]SDOI2010所驼门王的宝藏(强连通分量+优化建图) 最开始我想写线段树优化建图的说,数据结构学傻了233 虽然矩阵很大,但是没什么用,真正有用的是那些关键点 考虑关键点的类型: 横走型 竖 ...

  6. [SDOI2010]所驼门王的宝藏

    题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为"先知"的Alpaca L. Sotomon是这个家族的领袖,外人也称其为"所驼门王". ...

  7. [LuoguP2403][SDOI2010]所驼门王的宝藏

    题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为"先知"的Alpaca L. Sotomon是这个家族的领袖,外人也称其为"所驼门王". ...

  8. BZOJ 1924: [Sdoi2010]所驼门王的宝藏 【tarjan】

    Description 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先 知”的Alpaca L. Sotomon 是这个家族的领袖,外人也称其为“所驼门王”.所 驼门王毕生致力于维 ...

  9. 洛谷 2403 [SDOI2010] 所驼门王的宝藏

    题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先知”的Alpaca L. Sotomon是这个家族的领袖,外人也称其为“所驼门王”.所驼门王毕生致力于维护家族的安定与和谐, ...

随机推荐

  1. Django中的session和cookie及分页设置

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  2. Java Socket通讯---网络基础

    java socket 通讯 参考慕课网:http://www.imooc.com/learn/161 一.网络基础知识 1.1 通讯示意图 1.2 TCP/IP协议 TCP/IP是世界上应用最为广泛 ...

  3. Core篇——初探IdentityServer4(客户端模式,密码模式)

    Core篇——初探IdentityServer4(客户端模式,密码模式) 目录 1.Oatuth2协议的客户端模式介绍2.IdentityServer4客户端模式实现3.Oatuth2协议的密码模式介 ...

  4. 移动端 fixed 固定按钮在屏幕下方,然后按钮被键盘顶上来...顶上来了有没有~

    在移动端 H5 页面开发中,我使用了 fixed 固定某个元素在屏幕的最下方, 这时点击输入框,接着非常非常自然地出现了元素被系统键盘顶起来的情况,如下图. 解决方案: 首先,给页面最外层包裹一层 d ...

  5. 利用JavaScript的%做隔行换色

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  6. 机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)

    背景 最近互联网上出现一个热词就是“freestyle”,源于一个比拼rap的综艺节目.在节目中需要大量考验选手的freestyle能力,freestyle指的是rapper即兴的根据一段主题讲一串r ...

  7. C语言-重写strupr函数

    一.重写函数 Action(){ //重写strupr,小写变大写 char *desc; char *str="123abcd*"; desc=(char *)malloc(10 ...

  8. App测试- adb monkey测试

    一. 安装和配置SDK 1. 下载Android SDK并解压.如下图:(如果不存在tool和platform_tool,请点击SDK Manager在线下载和更新) 2.下载完成后,配置SDK环境变 ...

  9. bootstrap与jQuery结合的动态进度条

    此款进度条实现的功能: 1.利用了bootstrap的进度条组件. a.在最外层的<div>中加入class .progress,在里层<div>加入class .progre ...

  10. js 正则 测试

    var str0 = '2013-6-7()'; var AAAAADD = str0.match(/(\d)/g); //11个空字符串 //["2", "0" ...