AtCoder Regular Contest 090
2018-01-28 22:51
405 查看
C - Candies
链接:https://arc090.contest.atcoder.jp/tasks/arc090_a
题意:求矩形左上角到右下角的最大元素和(走动路径只能是向右或者向下)
分析:dfs,也可以是dp
【dfs】代码:
D - People on a Line
链接 :https://arc090.contest.atcoder.jp/tasks/arc090_b
题意:给定N个人(N个人位于x轴上,坐标范围[0,1e9]),M条信息,
信息格式:Li Ri Di 意思是编号为Ri的人距离编号为Li的人Di(Ri在Li右侧)
问给出的信息是否合法?
N范围是[1,1e5] ,M范围是[1,2e5]
分析: 感觉这英文原文怕也是谷歌百度的。。 虽然还能看懂
看到题目,第一感觉几何。。 想着证三点是否在同一直线。 数据大了,不行把OoO
换个思路,可以是一个森林,(不一定是树) 然后找根,并查集,好像可以OoO
这里比裸并查集多一个权值,也就是题中的距离。。 用一个数组记录权值
写法和并查集有些区别,因为加了一个权
拙见。。 部分参考代码。
【加权并查集】
代码:
链接:https://arc090.contest.atcoder.jp/tasks/arc090_a
题意:求矩形左上角到右下角的最大元素和(走动路径只能是向右或者向下)
分析:dfs,也可以是dp
【dfs】代码:
#include <bits/stdc++.h> using namespace std; #define mem(a,n) memset(a,n,sizeof(a)) #define rep(i,a,n) for(int i=a;i<n;i++) #define pb push_back #define IO ios::sync_with_stdio(false) #define fre freopen("in.txt","r",stdin) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long ll; const double PI=acos(-1.0); const double eps=1e-8; const int INF=0x3f3f3f3f; const int MOD=1e8; const int N=13; const int dir[4][2]= {-1,0,1,0,0,-1,0,1}; vector<vector<int> >vec; int n; int dfs(int i, int j) { if (i == 2 || j == n) return 0; else if (i == 1 && j == n-1) return vec[i][j]; else return max(dfs(i+1,j),dfs(i,j+1))+vec[i][j]; } int main() { //fre; IO; vector<int>a; int x; while(cin >> n) { rep(i,0,2) { rep(j,0,n) { cin >> x; a.pb(x); } vec.pb(a); a.clear(); } cout<<dfs(0,0)<<endl; vec.clear(); } return 0; }
D - People on a Line
链接 :https://arc090.contest.atcoder.jp/tasks/arc090_b
题意:给定N个人(N个人位于x轴上,坐标范围[0,1e9]),M条信息,
信息格式:Li Ri Di 意思是编号为Ri的人距离编号为Li的人Di(Ri在Li右侧)
问给出的信息是否合法?
N范围是[1,1e5] ,M范围是[1,2e5]
分析: 感觉这英文原文怕也是谷歌百度的。。 虽然还能看懂
看到题目,第一感觉几何。。 想着证三点是否在同一直线。 数据大了,不行把OoO
换个思路,可以是一个森林,(不一定是树) 然后找根,并查集,好像可以OoO
这里比裸并查集多一个权值,也就是题中的距离。。 用一个数组记录权值
写法和并查集有些区别,因为加了一个权
拙见。。 部分参考代码。
【加权并查集】
代码:
#include <bits/stdc++.h> using namespace std; #define mem(a,n) memset(a,n,sizeof(a)) #define rep(i,a,n) for(int i=a;i<n;i++) #define pb push_back #define IO ios::sync_with_stdio(false) #define fre freopen("in.txt","r",stdin) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long ll; const double PI=acos(-1.0); const double eps=1e-8; const int INF=0x3f3f3f3f; const int MOD=1e8; const int N=1e5+5; const int dir[4][2]= {-1,0,1,0,0,-1,0,1}; ll n,m; ll fa ,val ; ///fa[i]表示i的根节点 ll Find(ll x)///递归找根结点 并计算权值 { if(fa[x]==-1) return x;///fa[x]==-1 表示该节点无父节点 ll root=Find(fa[x]); val[x]+=val[fa[x]]; // cout<<"x="<<x<<" root="<<root<<endl; return fa[x]=root; } int main() { //fre; IO; while(cin>>n>>m) { mem(fa,-1); rep(i,1,m+1) { ll u,v,w; cin>>u>>v>>w; ll tmp1=Find(u); ll tmp2=Find(v); // cout<<"tmp1="<<tmp1<<" tmp2="<<tmp2<<endl; if(tmp1!=tmp2) { val[tmp1]=val[v]-w-val[u]; fa[tmp1]=tmp2;///u的根节点置为 v的根节点 } else if(val[v]-val[u]!=w)///不满足题意 { cout<<"No\n"; return 0; } } cout<<"Yes\n"; } return 0; }
相关文章推荐
- AtCoder Regular Contest 090 D - People on a Line
- AtCoder Regular Contest 090 D People on a Line
- Atcoder Regular Contest 081 总结
- 【推导】AtCoder Regular Contest 082 D - Derangement
- AtCoder Regular Contest 082-E-ConvexScore
- AtCoder Regular Contest 071 F
- Atcoder Regular Contest 072 E Alice in Linear Land
- 背包——AtCoder Regular Contest 073 #D
- AtCoder Regular Contest 098 F.Donation
- 从AtCoder Regular Contest 077D: 11 中学习逆元的线性求法
- AtCoder Regular Contest 077 E - guruguru
- AtCoder Regular Contest 078
- 【构造】AtCoder Regular Contest 079 F - Namori Grundy
- AtCoder Regular Contest 080 D - Grid Coloring
- AtCoder Regular Contest 080-D - Grid Coloring
- (dp)AtCoder Regular Contest 081 E - Don't Be a Subsequence
- AtCoder Regular Contest 081 E - Don't Be a Subsequence(字符串DP)
- 【计算几何】【推导】【补集转化】AtCoder Regular Contest 082 E - ConvexScore
- AtCoder Regular Contest 086 E - Smuggling Marbles(树形迭屁)
- AtCoder Regular Contest D - Remainder Reminder 取余问题