赞
踩
1.热热热,判断就行
2.谁进线下了,排序处理就行
3.暖炉与水豚,首先把暖炉旁的水豚标记为已访问,最后遍历一遍查找哪些没有标记的,周围表示点的格子便可能是暖炉位置,注意湿漉漉的水豚周围八个不能放,最后判断没有的话输出too cold
4.章鱼图,利用并查集,sz表示环的数量,最后判断大小的时候注意边即可
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int,int> pi;
- int n,m,st,en;
- int sz[100010],d[100010],p[100010];
- int find(int x){
- if(p[x]==x)return x;
- return p[x]=find(p[x]);
- }
- vector<int>e[100010];
- void solve(){
- cin>>n>>m;
- for(int i=1;i<=n;i++){
- e[i].clear(),p[i]=i,sz[i]=0,d[i]=-1;
- }
- for(int i=0;i<m;i++){
- int a,b;
- cin>>a>>b;
- e[a].push_back(b);
- e[b].push_back(a);
- int fa=find(a),fb=find(b);
- if(fa!=fb){
- sz[fb]+=sz[fa];
- p[fa]=fb;
- }
- else{
- sz[fa]++;
- st=a,en=b;
- }
- }
- int ans=0;
- for(int i=1;i<=n;i++){
- if(find(i)==i&&sz[i]==1){
- ans++;
- }
- }
- if(ans!=1){
- cout<<"No "<<ans<<endl;
- return;
- }
- queue<int>q;
- q.push(st);
- d[st]=1;
- while(!q.empty()){
- int u=q.front();q.pop();
- for(int v:e[u]){
- if(u==st&&v==en)continue;
- if(d[v]==-1){
- d[v]=d[u]+1;
- q.push(v);
- }
- }
- }
- cout<<"Yes "<<d[en]<<endl;
- }
- int main(){
- // ios::sync_with_stdio(0);
- // cin.tie(0),cout.tie(0);
- int _=1;
- cin>>_;
- while(_--){
- solve();
- }
- return 0;
- }
5.工作安排,把截止时间按升序排列,01背包模板即可
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int,int> pi;
- struct ed{
- int t,d,p;
- bool operator<(const ed &a)const{
- return d<a.d;
- }
- };
- void solve(){
- ll d[100010];
- memset(d,0,sizeof(d));
- ll ans=0;
- int n;cin>>n;
- vector<ed> e(n);
- for (int i = 0; i < n; i++) {
- cin >> e[i].t >> e[i].d >> e[i].p;
- }
- sort(e.begin(),e.end());
- for(ed i:e){
- for(int j=i.d;j>=i.t;j--)
- {
- d[j]=max(d[j],d[j-i.t]+i.p);
- ans=max(ans,d[j]);
- }
- }
- cout<<ans<<endl;
- }
- int main(){
- // ios::sync_with_stdio(0);
- // cin.tie(0),cout.tie(0);
- int _=1;
- cin>>_;
- while(_--){
- solve();
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。