triangle(第8届山东省赛的某题)

传送门

题意:喵了个呜,这题意真是峰回路转啊。懒死了,不想描述。

做法:我们拿set或线段树维护exp的最小值,每次取出exp值最小的边,删除之。并更新这条边所在的三元环的另外两条边的exp. nice(每次取出的边)就等于前缀最大值啦。

set维护版本

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cmath>
#include <cstring>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
#define rd(x) scanf("%d",&x)
#define prt(x) printf("%d\n", x);
#define prtvec(v) for(int i=0;i<v.size();i++) printf("%d%c", v[i], i==(v.size()-1)?'\n':' ');
#define sz(x) (int)x.size()
#define pb(x) push_back(x)
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define per(i,y,x) for(int i=y;i>=x;i--)
const int N=5000+10;
const double EPS = 1e-8;
vector<int> g[N];
struct Edge {
int from,to,exp,id;
bool operator < (const Edge & o) const {
if(exp==o.exp) {
return id < o.id;
}
return exp < o.exp;
}
};
int T,n,m,u[N],v[N],mx,ans[N],vis[N];
int number[N][N]; Edge edge[N][N];
set<Edge> st;
void init() {
st.clear();
rep(i,1,n) g[i].clear();
rep(i,1,n) rep(j,1,n) number[i][j]=0;
rep(i,1,n) vis[i]=0;
mx=0;
}
int main(){
rd(T);
while(T--) {
rd(n), rd(m);
init();
rep(i,1,m) {
rd(u[i]), rd(v[i]);
g[u[i]].pb(v[i]); g[v[i]].pb(u[i]);
number[u[i]][v[i]]=number[v[i]][u[i]]=i;
}
rep(i,1,m) {
int x=u[i];
int y=v[i];
Edge e; e.from=x,e.to=y,e.exp=0;e.id=i;
rep(j,1,n) vis[j]=0;
for(int j=0;j<g[x].size();j++) if(g[x][j] != y && g[x][j] != x) vis[g[x][j]] = 1;
for(int j=0;j<g[y].size();j++) if(vis[g[y][j]]==1) e.exp ++;
edge[x][y]=edge[y][x]=e;
st.insert(e);
}
while (st.size()) {
Edge e = *st.begin(); st.erase(e);
int x=e.from;
int y=e.to; number[x][y]=number[y][x]=0;
mx = max(mx, e.exp);
for(int i=1;i<=n;i++) {
if(x==i || y==i) continue;
if(number[x][i] && number[y][i]) {
st.erase(edge[x][i]); edge[x][i].exp --, edge[i][x].exp--; st.insert(edge[x][i]);
st.erase(edge[y][i]); edge[y][i].exp --; edge[i][y].exp--; st.insert(edge[y][i]);
}
}
ans[e.id] = mx;
}
rep(i,1,m) {
printf("%d\n", ans[i]);
}
}
}

线段树维护版本

#include <iostream>
#include <bitset> using namespace std;
typedef pair<int,int> pii;
const int N=10000+10;
bitset<2002> g[N],B; int s[N],a[N];
int n,m,u[N],v[N],ans[N];
int id[2002][2002];
void build(int l,int r,int rt){
if(l==r){
s[rt]=a[l];
return;
}
int mid=(l+r)>>1;
build(l,mid,rt<<1);
build(mid+1,r,rt<<1|1);
s[rt]=min(s[rt<<1],s[rt<<1|1]);
}
void update(int l,int r,int rt,int pos,int x){
if(l==r) {
s[rt] = x;
return;
}
int mid=(l+r)>>1;
if(pos<=mid)
update(l,mid,rt<<1,pos,x);
else
update(mid+1,r,rt<<1|1,pos,x); s[rt]=min(s[rt<<1],s[rt<<1|1]);
}
pii query(int l,int r,int rt) {
if (l==r) {
return make_pair(l, s[rt]);
}
int mid = (l+r)>>1;
if (s[rt<<1] < s[rt<<1|1])
return query(l,mid,rt<<1);
else
return query(mid+1,r,rt<<1|1);
}
int main() {
int T; scanf("%d",&T);
while (T --) {
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) id[i][j]=0;
for(int i=1;i<=m;i++) {
g[i].reset(); a[i] = 0;
}
for(int i=1;i<=m;i++) {
scanf("%d%d",&u[i],&v[i]);
g[u[i]][v[i]] = 1;
g[v[i]][u[i]] = 1;
id[u[i]][v[i]] = i;
id[v[i]][u[i]] = i;
}
for(int i=1;i<=m;i++) {
int x=u[i]; int y=v[i];
B = g[x] & g[y];
for(int j=1;j<=n;j++) {
if(j==x||j==y||B[j]==0) continue;
a[i] ++;
}
}
build(1,m,1);
int mx = 0;
for(int i=1;i<=m;i++) {
pii tmp = query(1,m,1);
mx = max(mx, tmp.second);
ans[tmp.first] = mx;
int x=u[tmp.first];
int y=v[tmp.first]; id[x][y]=id[y][x]=0;
B=g[x]&g[y];
for(int j=1;j<=n;j++) {
if(j==x||j==y||B[j]==0) continue;
if(id[j][x]==0||id[j][y]==0) continue;
update(1,m,1,id[j][x],--a[id[j][x]]);
update(1,m,1,id[j][y],--a[id[j][y]]);
}
update(1,m,1,tmp.first,N);
}
for(int i=1;i<=m;i++) {
printf("%d\n", ans[i]);
}
}
}

Triangle (第8届山东省赛的某题)的更多相关文章

  1. 第十届山东省赛L题Median(floyd传递闭包)+ poj1975 (昨晚的课程总结错了,什么就出度出度,那应该是叫讨论一个元素与其余的关系)

    Median Time Limit: 1 Second Memory Limit: 65536 KB Recall the definition of the median of elements w ...

  2. 2018年第九届山东省ACM省赛总结

    去年打完区域赛之后,面对着两个队友都去找实习的情况,我自己对今年省赛还是有点慌的.不只一次的像我的队友说明自己很慌,但是老曹跟会长都说:“没事,慌啥!”前几场训练赛因为老曹跟秋洁有面试有时候只能一个人 ...

  3. 第一届山东省ACM——Phone Number(java)

    Description We know that if a phone number A is another phone number B’s prefix, B is not able to be ...

  4. 第一届山东省ACM——Balloons(java)

    Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...

  5. 第七届河南省赛10403: D.山区修路(dp)

    10403: D.山区修路 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 69  Solved: 23 [Submit][Status][Web Bo ...

  6. 第七届河南省赛10402: C.机器人(扩展欧几里德)

    10402: C.机器人 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 53  Solved: 19 [Submit][Status][Web Boa ...

  7. 第七届河南省赛G.Code the Tree(拓扑排序+模拟)

    G.Code the Tree Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 35  Solved: 18 [Submit][Status][Web ...

  8. 第七届河南省赛B.海岛争霸(并差集)

    B.海岛争霸 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 130  Solved: 48 [Submit][Status][Web Board] D ...

  9. 第七届河南省赛A.物资调度(dfs)

    10401: A.物资调度 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 95  Solved: 54 [Submit][Status][Web Bo ...

随机推荐

  1. SIM900A设备在保加利亚无法正常使用GPRS问题

    1.      SIM900A设备在保加利亚GPRS功能无法正常使用 我们一款手持设备采用SIM900A模块,在发货之前测试正常,但到了保加利亚,客户发现无法正常上网,我们技术支持反馈的邮件反馈的现象 ...

  2. 【翻译】Ext JS最新技巧——2015-8-11

    原文:Top Support Tips Seth Lemmons:使用棒极了的Awesome Font Ext JS 6附带了一个新的海卫一主题,可以使用Font Awesome字体作为背景图像的图标 ...

  3. Dom4j修改xml文档引入

    前面介绍了如何解析xnl文档的内容,这里对修改xml展开讨论. 一.首先看一下,写出内容到xml文档的主要代码: XMLWriter writer = new XMLWriter(OutputStre ...

  4. Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机

    Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...

  5. 【一天一道LeetCode】#86. Partition List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  6. Android轶事之View要去大保健?View大小自己决定?

    -"爹,我要吃糖" -"好哒儿子" -"爹,我要吃包包" - "好哒儿子" - "爹,我要吃串串" ...

  7. 【一天一道LeetCode】#6 ZigZag Conversion

    一天一道LeetCode系列 (一)题目 The string "PAYPALISHIRING" is written in a zigzag pattern on a given ...

  8. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  9. MySQL内存调优

    原文链接: MySQL Memory Allocation -- by Rick James原文日期: Created 2010; Refreshed Oct, 2012, Jan, 2014 翻译人 ...

  10. LIRe 源代码分析 7:算法类[以颜色布局为例]

    ===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ...