题意:给出多个区间的和,判断数据矛盾的区间有几个,比方说【1,5】 = 10 ,【6.10】
= 10, 【1, 10】 = 30,这明显第三个与前面两个矛盾。
链接:点我
水题了,val代表到根的和
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 1000000007 10 const int INF=0x3f3f3f3f; 11 const double eps=1e-5; 12 typedef long long ll; 13 #define cl(a) memset(a,0,sizeof(a)) 14 #define ts printf("*****\n"); 15 const int MAXN=200010; 16 int n,m,tt; 17 int ans=0; 18 int f[MAXN]; 19 int val[MAXN]; 20 int find(int x) 21 { 22 if(f[x]==-1) return x; 23 int temp=find(f[x]); 24 val[x]+=val[f[x]]; 25 return f[x]=temp; 26 } 27 void bing(int x,int y,int w) 28 { 29 int t1=find(x); 30 int t2=find(y); 31 if(t1!=t2) 32 { 33 f[t2]=t1; 34 val[t2]=val[x]-val[y]+w; 35 } 36 else 37 { 38 if(val[y]-val[x]!=w) 39 { 40 ans++; 41 } 42 } 43 } 44 int main() 45 { 46 int i,j,k; 47 #ifndef ONLINE_JUDGE 48 freopen("1.in","r",stdin); 49 #endif 50 while(scanf("%d%d",&n,&m)!=EOF) 51 { 52 memset(f,-1,sizeof(f)); 53 memset(val,0,sizeof(val)); 54 ans=0; 55 int u,v,w; 56 for(i=0;i<m;i++) 57 { 58 scanf("%d%d%d",&u,&v,&w); 59 u-=1; 60 bing(u,v,w); 61 } 62 printf("%d\n",ans); 63 } 64 }
时间: 2024-10-13 20:01:14