日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces 472D

發布時間:2024/1/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces 472D 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看官方題解提供的是最小生成樹,怎么也想不明確。you can guess and prove it!

看了好幾個人的代碼。感覺實現思路全都不一樣,不得不佩服cf題目想法的多樣性

以下說說我自己的理解,將1作為根,對于隨意兩點存在兩種關系:

1.一個點位于還有一個點的子樹上。兩點到1的距離之差絕對值等于兩點距離。

2.兩個點在某一個點的不同子樹上。兩點到1距離之和減去兩點距離等于兩倍某個點到1的距離。

這樣不須要管父節點是哪一個,僅僅要保證存在即可了。

推斷這兩種情況就能夠了。

當然在開始的時候要注意一些特殊情況的推斷,預處理一下。

#include<iostream> #include<cstdio> #include<cstdlib> #include<string.h> #include<math.h> #include<algorithm> #include<vector> #include<queue> #include<map> using namespace std; int n; long long mp[2005][2005]; map <long long,int> m; int main() {int n;cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%I64d",&mp[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if((i==j && mp[i][j]) || (i!=j && mp[i][j]==0) || mp[i][j]!=mp[j][i]){cout<<"NO"<<endl;return 0;}}for(int i=1;i<=n;i++)m[2*mp[1][i]]=1;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if((mp[i][j]==abs(mp[1][i]-mp[1][j])) || m[mp[1][j]+mp[1][i]-mp[i][j]])continue;cout<<"NO"<<endl;return 0;}}cout<<"YES"<<endl;return 0; }

轉載于:https://www.cnblogs.com/jhcelue/p/7010750.html

總結

以上是生活随笔為你收集整理的Codeforces 472D的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。