在uoj上打的第二场比赛......还凑合(卧槽C题80分没了QAQ
第一次接触交互题还挺好玩的哈哈
可能是人比较多吧.....rating涨了不少......
现在我rating正好比lrd高1哈哈
言归正传。
拿到题之后先读了一遍题,惊奇的发现好多构造题......
看完E之后感觉一脸可做,把测评库下下来一看......噗20分简直就是白送啊,直接码了20分代码交上去了。
#include<cstring>
#include "isomorphism.h"
using namespace std;
graph G1,G2;
void hack(){//G1是一条链,G2是一条链后面有一个分叉,判定是否存在度数=3的点即可判定到底是哪个图
G1.n=;
for(int i=;i<;i++)G1.e.push_back(make_pair(i,i-));
G2=G1;
G1.e.push_back(make_pair(,));
G2.e.push_back(make_pair(,));
propose(G1,G2);
}
int du[];
int identify(graph G){
memset(du,,sizeof(du));
for(vector<pair<int,int> >::iterator it=G.e.begin();it!=G.e.end();it++){
du[it->first]++;
du[it->second]++;
}
for(int i=;i<=G.n;i++)if(du[i]==)return ;
return ;
}
交完之后想了想有没有什么办法卡掉算法3,看了看没看懂relabel写的什么玩意儿,想着可不可以造两个球然后中间连上一两条边,然后根据桥的存在性判断是哪个图......然而不会忘了怎么写dfs求桥了(卧槽我怎么把并查集暴力都忘了),作罢。看题解说造度数相同的两个图就行,卧槽为什么我没看出来
B题以为造一个二叉树就行,然后发现过不了样例......手动打了个样例的表,然后就交了,想了想没什么思路,跳。
看A题似乎是个$O(n^2)$的贪心?手算了一下前三个,直觉n很大的时候会无解,然后极其不严肃的写了一发就交上去了......
T=input()
while T:
T-=1
n=input()
if n<=3:
print 1
else:
print -1
后来,不想说什么了......
感觉rp都费光了
看着C像是个数据结构,想了想发现可以堆维护深度来暴力贪心,堆还可以换成队列直接暴力bfs,然后觉得可以离线一发然后平衡树启发式合并维护子树bfs序,得到子树bfs序之后直接二分一发就行......码着码着感觉不对劲,死亡次数的贡献不是直接加的,还得乘上深度,完了不会了直接暴力bfs好了。20分。
(其实后来看的时候只要在平衡树里把权值乘上深度最后再减掉似乎就行......脑残怎么治啊
D题觉得像DP,然而一点思路都没有,最后再还剩大约2h的时候弃坑。
懒得写题解了......看这里好了
反思:
这次比赛第一次接触交互题,也是第一次做构造题,还是没经验吧......
不知为什么比赛的时候智商比正常要低......rp++。
下一次比赛就是WC了吧......加油......