[Poi2012] bzoj 2788 Festival

最近在刷图论专题,这道题难度还算可以,顺便复习了一下差分约束。

1、建边

第一种可变形为 -1<=Xa-Xb<=-1  第二种变形为Xc-Xd<=0,根据差分约束,对于第一种,由Xa向Xb建权值为1的边,由Xb向Xa建权值为-1的边。

对于第二种,由Xc向Xd建权值为0的边。

2、tarjan缩点

由第一种构建出来的会出现环,依据差分约束系统,这些强连通分量内部的答案显然是最长路+1,所以tarjan统计出每个强连通分量

3、floyd求最长路

第二种会把这些强连通分量连接起来,所以只需分别求出每个强连通分量的最长路+1,再求sigma。

4、floyd判正环

只需初始化w[i][i]=0,跑完最长路之后看w[i][i]是否仍为0即可。

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#define inf -10000000
using namespace std;
struct bian
{
  int qi,zhong,w,next;
};
bian c[400010];
int n,m1,m2,jishu=0,jishu1=0,ans=0,jishu2=0,jishu3=0,w[610][610];
int dfn[610],low[610],belong[610],head[610],zhan[610];
bool in[610];
int x,y;
void add(int x,int y,int z)
{
  c[++jishu].qi=x;
  c[jishu].zhong=y;
  c[jishu].w=z;
  c[jishu].next=head[x];
  head[x]=jishu;
}
void tarjan(int x)
{
  dfn[x]=++jishu2;
  low[x]=jishu2;
  zhan[++jishu3]=x;
  in[x]=1;
  for(int i=head[x];i;i=c[i].next)
  {
    if(dfn[c[i].zhong]==-1)
    {
      tarjan(c[i].zhong);
      low[x]=min(low[x],low[c[i].zhong]);
    }
    else  if(in[c[i].zhong])
      low[x]=min(low[x],dfn[c[i].zhong]);
  }
  if(low[x]==dfn[x])
  {
    int y;
    jishu1++;
    while(1)
    {
      y=zhan[jishu3--];
      in[y]=0;
      belong[y]=jishu1;
      if(x==y)
        break;
    }
  }
}  
int main()
{
  cin>>n>>m1>>m2;
  memset(dfn,-1,sizeof(dfn));
  for(int i=1;i<=n;++i)
    for(int j=1;j<=n;++j)
      w[i][j]=inf;
  for(int i=1;i<=n;++i)
    w[i][i]=0;
  for(int i=1;i<=m1;++i)
  {
    cin>>x>>y;
    add(x,y,1);
    add(y,x,-1);
    w[x][y]=max(w[x][y],1);
    w[y][x]=max(w[y][x],-1);
  }
  for(int i=1;i<=m2;++i)
  {
    cin>>x>>y;
    add(x,y,0);
    w[x][y]=max(w[x][y],0); 
  }
  for(int i=1;i<=n;++i)
    if(dfn[i]==-1)
      tarjan(i);
  for(int i=1;i<=jishu1;++i)
  {
    int da=inf;
    for(int k=1;k<=n;++k)
    {
      if(belong[k]!=i)  continue;
      for(int j=1;j<=n;++j)
      {
        if(belong[j]!=i||w[j][k]==inf)  continue;
        for(int l=1;l<=n;++l)
        {
          if(belong[l]!=i||w[k][l]==inf)  continue;
          if(w[j][l]<w[j][k]+w[k][l])
            w[j][l]=w[j][k]+w[k][l];
        }
      }
    }
    for(int j=1;j<=n;++j)
    {
      if(belong[j]!=i)  continue;
      for(int k=1;k<=n;++k)
      {
        if(belong[k]!=i||w[j][k]==inf)  continue;
        da=max(da,abs(w[j][k]));
      }
    }
    ans+=da+1;
  }
  for(int i=1;i<=n;++i)
    if(w[i][i])
    {
      cout<<"NIE";
      return 0;
    }
  cout<<ans;
  return 0;
}
  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2012-2021年期间,百度地图点击量激增,。该点亮了在POI数据方面取得了重大突破与丰硕成果。 首先,在数据广度方面,百度POI数据覆盖范围不断扩大。从城市范围到县级范围,再到乡镇、村庄的覆盖,百度POI数据涵盖了更多的地理位置信息,为用户提供了更准确、细致的地理位置标识。 其次,在数据深度方面,百度POI数据逐渐丰富与完善。从最初提供基本的商家、景点信息,到后来增加了酒店、餐厅、娱乐场所等更多类别的POI数据,百度POI数据的种类更加丰富多样,用户能够更方便地查找到所需的具体位置与服务。 此外,百度POI数据还不断更新与优化,保证了数据的时效性与准确性。2012-2021年期间,百度通过引入大量国内外的数据合作伙伴,对POI进行不断的更新与整理,提高了数据的准确性和质量。此外,百度还通过众包的方式,鼓励用户亲身体验并提供POI数据的反馈,加快了数据的更新速度。 至今,百度POI数据已经成为用户寻找位置、探索周边、选择服务的重要工具。它不仅为用户提供了丰富的信息资源,也促进了电商、O2O等领域的快速发展。相信在未来,百度POI数据将继续发挥重要的作用,为用户带来更好的地理位置服务体验。 ### 回答2: 2012-2021年间,百度POI数据经历了长足的发展和变化。百度POIPoint of Interest)是指百度地图中所标注的各种地点和位置信息,如餐馆、商店、景点等。 首先,百度POI数据在这十年间数量迅速增加。随着用户对位置信息需求的增长和百度地图用户群体的扩大,越来越多的POI数据被纳入百度地图数据库中。这使得用户可以更方便地查询、导航和了解周围的位置信息。 其次,百度POI数据的准确性和完整性也得到了提升。百度不断优化算法和增加数据源,以提高POI数据的可信度和实用性。例如,百度通过搜集用户的反馈信息和使用大数据分析技术,不断更新POI信息,保证了数据的最新性和准确性。 另外,百度还逐渐完善了POI数据的分类和检索方式。除了常见的餐馆、商店等基础分类,百度还增加了更具细分特色的POI数据,如咖啡馆、超市、健身房等。同时,借助人工智能和自然语言处理技术,百度也加强了对POI数据的语义理解和智能检索能力,提供了更优质的POI搜索结果。 最后,随着移动互联网的普及和技术的发展,百度还将POI数据与其他服务相结合,创造了更多有价值的功能。例如,百度将POI数据与打车服务相结合,提供了快速叫车的功能;将POI数据与外卖服务相结合,实现了一键订餐和送餐服务。 总之,2012-2021年间,百度POI数据经历了数量的大幅增加,准确性的提升,分类和检索方式的完善,以及与其他服务的结合创新。这些改进使得用户能够更方便地获取、利用和享受基于位置信息的服务。 ### 回答3: 2012年至2021年期间,百度POI(兴趣点)数据经历了长足的发展和变化。POI数据是指百度地图上所标注的各类地理位置信息,包括商业设施、交通设施、餐饮娱乐、医疗教育等。 在这十年间,随着移动互联网的普及和用户需求的增加,百度POI数据逐渐扩大和完善。首先,百度增加了大量新的POI数据点,覆盖了更多的城市和区域。不仅一线城市和旅游热点地区有了详细的POI信息,二线城市和乡村地区的POI数据也得到了增强。 其次,百度POI数据的分类和分类精度也得到了提高。原先的POI分类主要包括餐饮、购物、住宿等基本类别,而现在的POI数据能更加详细地划分为各种具体类型,如咖啡厅、超市、酒店等,方便用户查找和选择。 在数据更新方面,百度也加强了POI数据的更新频率和准确性。由于城市的发展变化以及商业设施的兴衰,百度通过不断收集用户反馈和行业动态,及时更新POI数据,确保用户能获得最新最准确的信息。 此外,随着技术的进步,2012年至2021年间,百度POI数据也逐渐与其他数据源进行整合。例如,百度结合了社交媒体数据、公共交通数据等,使得POI数据更具实时性和多样化。 总的来说,2012-2021年是百度POI数据不断发展和完善的十年。通过增加新的POI数据点、提高分类和分类精度、加强数据更新和与其他数据源整合,百度不断提升了POI数据的质量和覆盖面,为用户提供更好的地理位置信息服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值